on main help sign in
merge: resolve conflicts with main
commit9af81e357b90ee2ec569d1c3f536bce7c96cfcf3 authorKieran Klukas <kieran@dunkirk.sh> dateTue 5 May 2026, 13:21 (5 months ago) parentc9fd6be3d95ca9
72 files changed+6558−4103
.envrc+1 .github/cla-signatures.json+80 .github/workflows/release.yml−1 .github/workflows/security.yml+5−5 .github/workflows/snapshot.yml+1−1 .gitignore+3 docs/hooks/FUTURE.md+2−1 docs/hooks/README.md+115−42 flake.lock+61 flake.nix+44 go.mod+26−26 go.sum+64−64 internal/agent/coordinator.go+30−15 internal/agent/hyper/provider.go+42−15 internal/agent/hyper/provider.json+101−5 internal/agent/testdata/TestCoderAgent/glm-5.1/bash_tool.yaml+565−259 internal/agent/testdata/TestCoderAgent/glm-5.1/download_tool.yaml+321−145 internal/agent/testdata/TestCoderAgent/glm-5.1/fetch_tool.yaml+127−347 internal/agent/testdata/TestCoderAgent/glm-5.1/glob_tool.yaml+122−118 internal/agent/testdata/TestCoderAgent/glm-5.1/grep_tool.yaml+516−144 internal/agent/testdata/TestCoderAgent/glm-5.1/ls_tool.yaml+378−122 internal/agent/testdata/TestCoderAgent/glm-5.1/multiedit_tool.yaml+570−424 internal/agent/testdata/TestCoderAgent/glm-5.1/parallel_tool_calls.yaml+371−219 internal/agent/testdata/TestCoderAgent/glm-5.1/read_a_file.yaml+159−87 internal/agent/testdata/TestCoderAgent/glm-5.1/simple_test.yaml+98−110 internal/agent/testdata/TestCoderAgent/glm-5.1/sourcegraph_tool.yaml+594−830 internal/agent/testdata/TestCoderAgent/glm-5.1/update_a_file.yaml+550−266 internal/agent/testdata/TestCoderAgent/glm-5.1/write_tool.yaml+121−131 internal/agent/tools/job_kill.go+1−1 internal/agent/tools/job_kill.md+1−1 internal/agent/tools/view.go+1−1 internal/agent/tools/view.md+2−2 internal/app/app.go+17−40 internal/app/app_test.go+133−107 internal/backend/events.go+5−3 internal/client/dial_other.go−1 internal/cmd/login.go−4 internal/cmd/root_other.go−1 internal/cmd/run.go+1−1 internal/cmd/server_other.go−1 internal/cmd/session.go+10−4 internal/config/config.go+3−11 internal/config/load.go+11−10 internal/config/provider.go+1−4 internal/config/reload_hooks_test.go+102 internal/config/store.go+68−7 internal/config/store_test.go+182 internal/db/connect.go+7 internal/db/connect_modernc.go+3 internal/db/connect_ncruces.go+5−1 internal/hooks/hooks_test.go+34 internal/hooks/runner.go+46−8 internal/server/net_other.go−1 internal/server/proto.go+3−3 internal/ui/attachments/attachments.go+12 internal/ui/chat/messages.go+16 internal/ui/chat/tools.go+11−6 internal/ui/common/common.go+23−2 internal/ui/common/elements.go+32−1 internal/ui/common/markdown.go+34−2 internal/ui/completions/completions.go+9 internal/ui/dialog/oauth.go+17−17 internal/ui/logo/logo.go+12−4 internal/ui/model/chat.go+12 internal/ui/model/header.go+30−4 internal/ui/model/sidebar.go+4−2 internal/ui/model/status.go+6−4 internal/ui/model/ui.go+212−65 internal/ui/styles/quickstyle.go+338−359 internal/ui/styles/styles.go+8−4 internal/ui/styles/themes.go+75−29 schema.json+4−15
.envrcnew file+1
@@ -0,0 +1 @@
1+use flake
.github/cla-signatures.json+80
@@ -1615,6 +1615,86 @@
16151615 "created_at": "2026-04-23T12:33:57Z",
16161616 "repoId": 987670088,
16171617 "pullRequestNo": 2688
1618+ },
1619+ {
1620+ "name": "georgeglarson",
1621+ "id": 744063,
1622+ "comment_id": 4341592963,
1623+ "created_at": "2026-04-29T07:08:48Z",
1624+ "repoId": 987670088,
1625+ "pullRequestNo": 2749
1626+ },
1627+ {
1628+ "name": "vorticalbox",
1629+ "id": 10886065,
1630+ "comment_id": 4344669740,
1631+ "created_at": "2026-04-29T14:29:35Z",
1632+ "repoId": 987670088,
1633+ "pullRequestNo": 2751
1634+ },
1635+ {
1636+ "name": "lloydzhou",
1637+ "id": 1826685,
1638+ "comment_id": 4346011097,
1639+ "created_at": "2026-04-29T17:27:37Z",
1640+ "repoId": 987670088,
1641+ "pullRequestNo": 2752
1642+ },
1643+ {
1644+ "name": "carlosgrillet",
1645+ "id": 13719979,
1646+ "comment_id": 4351020450,
1647+ "created_at": "2026-04-30T08:48:52Z",
1648+ "repoId": 987670088,
1649+ "pullRequestNo": 2759
1650+ },
1651+ {
1652+ "name": "SAY-5",
1653+ "id": 240962040,
1654+ "comment_id": 4357189565,
1655+ "created_at": "2026-05-01T01:00:00Z",
1656+ "repoId": 987670088,
1657+ "pullRequestNo": 2691
1658+ },
1659+ {
1660+ "name": "mkaaad",
1661+ "id": 119158371,
1662+ "comment_id": 4358493210,
1663+ "created_at": "2026-05-01T08:25:06Z",
1664+ "repoId": 987670088,
1665+ "pullRequestNo": 2772
1666+ },
1667+ {
1668+ "name": "pragneshbagary",
1669+ "id": 41118746,
1670+ "comment_id": 4359152162,
1671+ "created_at": "2026-05-01T11:54:16Z",
1672+ "repoId": 987670088,
1673+ "pullRequestNo": 2773
1674+ },
1675+ {
1676+ "name": "somjik-api",
1677+ "id": 47082582,
1678+ "comment_id": 4364741275,
1679+ "created_at": "2026-05-02T21:17:55Z",
1680+ "repoId": 987670088,
1681+ "pullRequestNo": 2783
1682+ },
1683+ {
1684+ "name": "ilgax",
1685+ "id": 79969769,
1686+ "comment_id": 4367211073,
1687+ "created_at": "2026-05-03T21:25:46Z",
1688+ "repoId": 987670088,
1689+ "pullRequestNo": 2790
1690+ },
1691+ {
1692+ "name": "ardevd",
1693+ "id": 366855,
1694+ "comment_id": 4377260996,
1695+ "created_at": "2026-05-05T07:22:31Z",
1696+ "repoId": 987670088,
1697+ "pullRequestNo": 2801
16181698 }
16191699 ]
16201700}
.github/workflows/release.yml−1
@@ -25,7 +25,6 @@ jobs:
2525 fury_token: ${{ secrets.FURY_TOKEN }}
2626 nfpm_gpg_key: ${{ secrets.NFPM_GPG_KEY }}
2727 nfpm_passphrase: ${{ secrets.NFPM_PASSPHRASE }}
28− snapcraft_token: ${{ secrets.SNAPCRAFT_TOKEN }}
2928 aur_key: ${{ secrets.AUR_KEY }}
3029 macos_sign_p12: ${{ secrets.MACOS_SIGN_P12 }}
3130 macos_sign_password: ${{ secrets.MACOS_SIGN_PASSWORD }}
.github/workflows/security.yml+5−5
@@ -30,11 +30,11 @@ jobs:
3030 - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
3131 with:
3232 persist-credentials: false
33− - uses: github/codeql-action/init@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
33+ - uses: github/codeql-action/init@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3
3434 with:
3535 languages: ${{ matrix.language }}
36− - uses: github/codeql-action/autobuild@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
37− - uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
36+ - uses: github/codeql-action/autobuild@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3
37+ - uses: github/codeql-action/analyze@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3
3838
3939 grype:
4040 runs-on: ubuntu-latest
@@ -52,7 +52,7 @@ jobs:
5252 path: "."
5353 fail-build: true
5454 severity-cutoff: critical
55− - uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
55+ - uses: github/codeql-action/upload-sarif@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3
5656 with:
5757 sarif_file: ${{ steps.scan.outputs.sarif }}
5858
@@ -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@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2
76+ - uses: github/codeql-action/upload-sarif@e46ed2cbd01164d986452f91f178727624ae40d7 # v4.35.3
7777 with:
7878 sarif_file: results.sarif
7979
.github/workflows/snapshot.yml+1−1
@@ -25,7 +25,7 @@ jobs:
2525 - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
2626 with:
2727 go-version-file: go.mod
28− - uses: goreleaser/goreleaser-action@e24998b8b67b290c2fa8b7c14fcfa7de2c5c9b8c # v7.1.0
28+ - uses: goreleaser/goreleaser-action@1a80836c5c9d9e5755a25cb59ec6f45a3b5f41a8 # v7.2.1
2929 with:
3030 version: "nightly"
3131 distribution: goreleaser-pro
.gitignore+3
@@ -42,6 +42,9 @@ Thumbs.db
4242.env
4343.env.local
4444
45+# Nix/direnv
46+.direnv/
47+
4548**/.crush/**
4649
4750/crush
docs/hooks/FUTURE.md+2−1
@@ -4,7 +4,8 @@ This document tracks planned features and design notes for hooks that are not
44yet implemented. Nothing here is part of the current contract. Treat it as a
55scratchpad for what's next, not as documentation of current behavior.
66
7−> [!NOTE] This document was largely LLM-generated.
7+> [!NOTE]
8+> This document was largely LLM-generated.
89
910## `context_files`
1011
docs/hooks/README.md+115−42
@@ -1,33 +1,92 @@
11# Hooks
22
3−> [!NOTE] This document was designed for both humans and agents.
3+> [!NOTE]
4+> This document was designed for both humans and agents.
45
5−Hooks are user-defined shell commands that fire at specific points during
6−Crush's execution, giving you deterministic control over an agent's wily
7−behavior.
6+Hooks are user-defined shell scripts that run when various events happen during
7+the agent lifecycle, allowing you to both build on top of Crush, customize
8+its behavior, and exert deterministic control over an agent's wily behavior.
89
9−Hooks in Crush are shell-based, with a focus on simplicity. This allows hooks to
10−effectively be written in any language. In this document we'll primarily focus
11−on Bash for simplicity's sake, though we'll include some examples in other
12−languages at the end, too.
10+Hooks are just shell commands, and were designed to be both simple and future
11+forward.
1312
1413### Hot Hook Facts
1514
16−- Hooks run before permission checks. If a hook denies a tool call, you'll
17− never see a permission prompt for it. If a hook explicitly allows a tool
18− call, you'll _also_ never see a prompt — Crush treats `"decision": "allow"`
19− as affirmative pre-approval.
20−- Hooks only fire on the **top-level agent's** tool calls. Sub-agents (the
21− `agent` task tool, `agentic_fetch`, etc.) run without hook interception so
22− a single delegated turn doesn't trigger your hook N times. The outer
23− sub-agent tool call itself _is_ hooked, so policy like "never let the
24− agent spawn sub-agents" still works.
25−- Hooks are also compatible with hooks in Claude Code, however this document
26− covers the Crush-specific API only. One intentional divergence: Crush treats
27− `updated_input` as a shallow-merge patch rather than a full replacement — see
28− [Output](#output) below.
15+- Hooks just shell commands
16+- Hooks can be written in any language because they’re just executables: Bash, Python, Node, Rust, Haskell, whatever
17+- Hooks are Claude Code-compatible
18+- Crush ships with a builtin `crush-hook` skill write, edit, and configure
19+ hooks; just tell Crush how to configure Crush
2920- Crush currently supports just one hook, `PreToolUse`, with plans to support
30− the full gamut. If there's a hook you'd like to see, let us know.
21+ the full gamut; please let us know which hooks you'd like to see next
22+- Hooks run in parallel for speed, but their results compose in config order
23+ for determinism
24+
25+### Some things you can do with hooks:
26+
27+- Block "dangerous" commands: no more `git push -f` or `cabal init`
28+- Rewrite tool input: turn `node` calls info `deno`, scrub secrets from
29+ commands, rewrite all mentions of "Haskell" into "Haskell, The Best
30+ Language", and so on
31+- Inject context: add notes to the model's context whenever certain tools are
32+ called. For example: "remember to run gofumpt after editing Go files"
33+- Auto-approve tools: skip the permission prompt for bash commands that
34+ you know are safe
35+- Log certain tool calls
36+
37+…And lots more. Show us what you're building!
38+
39+## Baby's First Hook
40+
41+Let's just dive into it and make a simple hook. This particular hook will
42+disallow the use of Haskell (but we love you, Simon Peyton Jones).
43+
44+### Config
45+
46+The first thing we need to do is hook up our hook. Let's add the following to
47+our local `crush.json`. You can, of course, do this globally, too.
48+
49+```jsonc
50+{
51+ // As expected, hooks go in a "hooks" object.
52+ "hooks": {
53+ // PreToolUse is an event that fires before a tool is used.
54+ "PreToolUse": [
55+ {
56+ // What tool do we want to hook into? In this case, Bash, because it
57+ // runs the stuff we wanna block.
58+ "matcher": "^bash$",
59+
60+ // The path to our actual hook script.
61+ "command": "./no-haskell.sh",
62+ },
63+ ],
64+ },
65+}
66+```
67+
68+Now, let's make our `no-haskell.sh` hook script.
69+
70+```bash
71+#!/usr/bin/env bash
72+
73+# Disallow ghc, cabal, and stack. Pipe the bash command output
74+# ($CRUSH_TOOL_INPUT_COMMAND) to grep and match on a regexp.
75+if echo "$CRUSH_TOOL_INPUT_COMMAND" | grep -qE '(^| )((ghc|cabal|stack)(\.exe)?)( |$)'; then
76+
77+ # Someone is trying to use Haskell. Let's send a message back to the model
78+ # and user explaining why we're blocking this. Note that we send all feedback
79+ # like this to stderr.
80+ echo "No Haskell allowed, kiddo." >&2
81+
82+ # Now, block the tool call by exiting with code 2.
83+ exit 2
84+fi
85+```
86+
87+That's basically it. For the full guide on how hooks work, however, read on.
88+
89+---
3190
3291## Execution model
3392
@@ -70,8 +129,8 @@ What this means in practice:
70129
71130## Configuration
72131
73−Hooks can be added to your `crush.json` at both the global and project-level,
74−with project level hooks taking precedence.
132+Hooks can be added to your `crush.json` (or `.crush.json`) at both the global
133+and project-level, with project level hooks taking precedence.
75134
76135```jsonc
77136{
@@ -87,8 +146,8 @@ with project level hooks taking precedence.
87146}
88147```
89148
90−Hooks are keyed by event name. Only `command` is required; omit `matcher` to
91−match all tools.
149+Remember, hooks will run in parallel but resolve in config order. Last hook
150+wins when rewriting input, but first deny wins when blocking.
92151
93152## Events
94153
@@ -97,29 +156,24 @@ Here are the events you can hook into (spoiler: there's currently just one):
97156### PreToolUse
98157
99158This hook fires before every tool call. Use it to block dangerous commands,
100−enforce policies, rewrite tool input, or inject context the model should see.
159+enforce policies, rewrite tool input, inject context the model should see, log
160+stuff, and so on.
101161
102162**Matched against**: the tool name (e.g. `bash`, `edit`, `write`,
103163`mcp_github_create_pull_request`).
104164
105−> [!NOTE] Event names are case insensitive and snake-caseable, so `PreToolUse`,
165+> [!NOTE]
166+> Event names are case insensitive and snake-caseable, so `PreToolUse`,
106167> `pretooluse`, `PRETOOLUSE`, `pre_tool_use`, and `PRE_TOOL_USE` all work.
107168
108−## Baby's First Hook
109−
110−Hooks are just shell scripts. Go crazy.
169+**Scope**: `PreToolUse` only fires on the **top-level agent's** tool calls.
170+Sub-agents (the `agent` task tool, `agentic_fetch`, etc.) run without hook
171+interception so a single delegated turn doesn't trigger your hook N times. The
172+outer sub-agent tool call itself _is_ hooked, so policy like "never let the
173+agent spawn sub-agents" still works.
111174
112−```bash
113−#!/usr/bin/env bash
114−
115−# Log all bash tool calls to a file.
116−printf "%s: %s / %s" \
117− "$(date -Iseconds)" \
118− "$CRUSH_SESSION_ID" \
119− "$CRUSH_TOOL_INPUT_COMMAND" >> ./bash.log
120−```
121−
122−That's basically it. For the full guide on how hooks work, however, read on.
175+Hooks are keyed by event name. Only `command` is required, and you can omit
176+`matcher` to match all tools.
123177
124178## Building Hooks
125179
@@ -133,6 +187,11 @@ When a hook fires, Crush:
1331874. Waits for all to finish (or time out), then aggregates results **in config
134188 order**: deny wins over allow, allow wins over none; `updated_input` patches
135189 shallow-merge in order.
190+5. Applies the result **before** permission checks. If the aggregated decision
191+ is `deny`, the tool call is blocked and you never see a permission prompt
192+ for it. If it's `allow`, Crush treats that as affirmative pre-approval and
193+ also skips the prompt. Silence (no decision) falls through to the normal
194+ permission flow.
136195
137196Note that you can omit `matcher` and match in your shell script instead,
138197however you'll incur some additional overhead as Crush will still parse and
@@ -487,6 +546,20 @@ process.stdin.on("end", () => {
487546
488547---
489548
549+## Claude Code compatibility
550+
551+Crush hooks are broadly compatible with [Claude Code
552+hooks](https://docs.claude.com/en/docs/claude-code/hooks): the config shape,
553+stdin payload, output envelope, and exit codes line up so most Claude Code
554+hooks run under Crush unchanged. This document covers the Crush-specific API
555+only — anything not documented here isn't guaranteed to work.
556+
557+One intentional divergence: Crush treats `updated_input` as a shallow-merge
558+patch against the original `tool_input` rather than a full replacement. Keys
559+you omit are preserved. See [Output](#output) for details.
560+
561+---
562+
490563## Reference
491564
492565This is the official reference of the narrative above. If prose and this section
flake.locknew file+61
@@ -0,0 +1,61 @@
1+{
2+ "nodes": {
3+ "flake-utils": {
4+ "inputs": {
5+ "systems": "systems"
6+ },
7+ "locked": {
8+ "lastModified": 1731533236,
9+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
10+ "owner": "numtide",
11+ "repo": "flake-utils",
12+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
13+ "type": "github"
14+ },
15+ "original": {
16+ "owner": "numtide",
17+ "repo": "flake-utils",
18+ "type": "github"
19+ }
20+ },
21+ "nixpkgs": {
22+ "locked": {
23+ "lastModified": 1775423009,
24+ "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
25+ "owner": "NixOS",
26+ "repo": "nixpkgs",
27+ "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
28+ "type": "github"
29+ },
30+ "original": {
31+ "owner": "NixOS",
32+ "ref": "nixos-unstable",
33+ "repo": "nixpkgs",
34+ "type": "github"
35+ }
36+ },
37+ "root": {
38+ "inputs": {
39+ "flake-utils": "flake-utils",
40+ "nixpkgs": "nixpkgs"
41+ }
42+ },
43+ "systems": {
44+ "locked": {
45+ "lastModified": 1681028828,
46+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
47+ "owner": "nix-systems",
48+ "repo": "default",
49+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
50+ "type": "github"
51+ },
52+ "original": {
53+ "owner": "nix-systems",
54+ "repo": "default",
55+ "type": "github"
56+ }
57+ }
58+ },
59+ "root": "root",
60+ "version": 7
61+}
flake.nixnew file+44
@@ -0,0 +1,44 @@
1+{
2+ description = "Crush development environment";
3+
4+ inputs = {
5+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
6+ flake-utils.url = "github:numtide/flake-utils";
7+ };
8+
9+ outputs = {
10+ self,
11+ nixpkgs,
12+ flake-utils,
13+ }:
14+ flake-utils.lib.eachDefaultSystem (
15+ system: let
16+ pkgs = nixpkgs.legacyPackages.${system};
17+ in {
18+ devShells.default = pkgs.mkShell {
19+ buildInputs = with pkgs; [
20+ # Go toolchain
21+ go_1_26
22+
23+ # Development tools
24+ gopls # Go language server
25+ golangci-lint # Linter
26+ gofumpt # Formatter (stricter than gofmt)
27+ go-task # Task runner
28+ delve # Go debugger
29+
30+ # Additional tools
31+ git # Version control
32+ gh # GitHub CLI
33+ svu # Semantic version utility
34+ sqlc # SQL code generator
35+ ];
36+
37+ shellHook = ''
38+ # Set Go environment variables
39+ export CGO_ENABLED=0
40+ '';
41+ };
42+ }
43+ );
44+}
go.mod+26−26
@@ -5,9 +5,9 @@ go 1.26.2
55require (
66 charm.land/bubbles/v2 v2.1.0
77 charm.land/bubbletea/v2 v2.0.6
8− charm.land/catwalk v0.37.14
8+ charm.land/catwalk v0.39.5
99 charm.land/fang/v2 v2.0.1
10− charm.land/fantasy v0.21.0
10+ charm.land/fantasy v0.23.0
1111 charm.land/glamour/v2 v2.0.0
1212 charm.land/lipgloss/v2 v2.0.3
1313 charm.land/log/v2 v2.0.0
@@ -16,7 +16,7 @@ require (
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.23.1
19+ github.com/alecthomas/chroma/v2 v2.24.1
2020 github.com/atotto/clipboard v0.1.4
2121 github.com/aymanbagabas/go-nativeclipboard v0.1.3
2222 github.com/aymanbagabas/go-udiff v0.4.1
@@ -43,18 +43,18 @@ require (
4343 github.com/gen2brain/beeep v0.11.2
4444 github.com/go-git/go-git/v5 v5.18.0
4545 github.com/google/uuid v1.6.0
46− github.com/invopop/jsonschema v0.13.0
46+ github.com/invopop/jsonschema v0.14.0
4747 github.com/itchyny/gojq v0.12.19
4848 github.com/joho/godotenv v1.5.1
4949 github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d
5050 github.com/lucasb-eyer/go-colorful v1.4.0
51− github.com/mattn/go-isatty v0.0.21
52− github.com/modelcontextprotocol/go-sdk v1.5.0
53− github.com/ncruces/go-sqlite3 v0.33.3
51+ github.com/mattn/go-isatty v0.0.22
52+ github.com/modelcontextprotocol/go-sdk v1.6.0
53+ github.com/ncruces/go-sqlite3 v0.34.0
5454 github.com/nxadm/tail v1.4.11
5555 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
56− github.com/posthog/posthog-go v1.12.1
57− github.com/pressly/goose/v3 v3.27.0
56+ github.com/posthog/posthog-go v1.12.4
57+ github.com/pressly/goose/v3 v3.27.1
5858 github.com/qjebbs/go-jsons v1.0.0-alpha.5
5959 github.com/rivo/uniseg v0.4.7
6060 github.com/sahilm/fuzzy v0.1.1
@@ -73,7 +73,7 @@ require (
7373 golang.org/x/text v0.36.0
7474 gopkg.in/natefinch/lumberjack.v2 v2.2.1
7575 gopkg.in/yaml.v3 v3.0.1
76− modernc.org/sqlite v1.49.1
76+ modernc.org/sqlite v1.50.0
7777 mvdan.cc/sh/moreinterp v0.0.0-20250902163504-3cf4fd5717a5
7878 mvdan.cc/sh/v3 v3.13.1
7979)
@@ -89,7 +89,7 @@ require (
8989 github.com/KyleBanks/depth v1.2.1 // indirect
9090 github.com/andybalholm/cascadia v1.3.3 // indirect
9191 github.com/aws/aws-sdk-go-v2 v1.41.6 // indirect
92− github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect
92+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 // indirect
9393 github.com/aws/aws-sdk-go-v2/config v1.32.16 // indirect
9494 github.com/aws/aws-sdk-go-v2/credentials v1.19.15 // indirect
9595 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 // indirect
@@ -102,7 +102,7 @@ require (
102102 github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 // indirect
103103 github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 // indirect
104104 github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 // indirect
105− github.com/aws/smithy-go v1.25.0 // indirect
105+ github.com/aws/smithy-go v1.25.1 // indirect
106106 github.com/aymerick/douceur v0.2.0 // indirect
107107 github.com/bahlo/generic-list-go v0.2.0 // indirect
108108 github.com/buger/jsonparser v1.1.2 // indirect
@@ -113,7 +113,7 @@ require (
113113 github.com/charmbracelet/x/windows v0.2.2 // indirect
114114 github.com/cyphar/filepath-securejoin v0.4.1 // indirect
115115 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
116− github.com/dlclark/regexp2 v1.11.5 // indirect
116+ github.com/dlclark/regexp2 v1.12.0 // indirect
117117 github.com/ebitengine/purego v0.10.0 // indirect
118118 github.com/esiqveland/notify v0.13.3 // indirect
119119 github.com/felixge/httpsnoop v1.0.4 // indirect
@@ -135,7 +135,7 @@ require (
135135 github.com/godbus/dbus/v5 v5.2.2 // indirect
136136 github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
137137 github.com/google/go-cmp v0.7.0 // indirect
138− github.com/google/jsonschema-go v0.4.2 // indirect
138+ github.com/google/jsonschema-go v0.4.3 // indirect
139139 github.com/google/s2a-go v0.1.9 // indirect
140140 github.com/googleapis/enterprise-certificate-proxy v0.3.15 // indirect
141141 github.com/googleapis/gax-go/v2 v2.22.0 // indirect
@@ -147,10 +147,10 @@ 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/go-i18n v0.3.0 // indirect
151− github.com/kaptinlin/jsonpointer v0.4.17 // indirect
152− github.com/kaptinlin/jsonschema v0.7.7 // indirect
153− github.com/kaptinlin/messageformat-go v0.4.19 // indirect
150+ github.com/kaptinlin/go-i18n v0.4.4 // indirect
151+ github.com/kaptinlin/jsonpointer v0.4.19 // indirect
152+ github.com/kaptinlin/jsonschema v0.7.11 // indirect
153+ github.com/kaptinlin/messageformat-go v0.6.0 // indirect
154154 github.com/klauspost/compress v1.18.5 // indirect
155155 github.com/klauspost/cpuid/v2 v2.2.10 // indirect
156156 github.com/klauspost/pgzip v1.2.6 // indirect
@@ -164,11 +164,12 @@ require (
164164 github.com/muesli/mango-cobra v1.2.0 // indirect
165165 github.com/muesli/mango-pflag v0.1.0 // indirect
166166 github.com/muesli/roff v0.1.0 // indirect
167− github.com/ncruces/go-sqlite3-wasm v1.1.1-0.20260409221933-87e4b35a38d0 // indirect
167+ github.com/ncruces/go-sqlite3-wasm/v2 v2.1.35300 // indirect
168168 github.com/ncruces/go-strftime v1.0.0 // indirect
169169 github.com/ncruces/julianday v1.0.0 // indirect
170170 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
171− github.com/pierrec/lz4/v4 v4.1.25 // indirect
171+ github.com/pb33f/ordered-map/v2 v2.3.1 // indirect
172+ github.com/pierrec/lz4/v4 v4.1.26 // indirect
172173 github.com/pjbgf/sha1cd v0.3.2 // indirect
173174 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
174175 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
@@ -184,7 +185,6 @@ require (
184185 github.com/tidwall/pretty v1.2.1 // indirect
185186 github.com/u-root/u-root v0.14.1-0.20250807200646-5e7721023dc7 // indirect
186187 github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect
187− github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
188188 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
189189 github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
190190 github.com/yuin/goldmark v1.7.8 // indirect
@@ -198,23 +198,23 @@ require (
198198 go.uber.org/multierr v1.11.0 // indirect
199199 go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect
200200 golang.org/x/crypto v0.50.0 // indirect
201− golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect
201+ golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
202202 golang.org/x/image v0.38.0 // indirect
203− golang.org/x/mod v0.34.0 // indirect
203+ golang.org/x/mod v0.35.0 // indirect
204204 golang.org/x/oauth2 v0.36.0 // indirect
205205 golang.org/x/term v0.42.0 // indirect
206206 golang.org/x/time v0.15.0 // indirect
207− golang.org/x/tools v0.43.0 // indirect
207+ golang.org/x/tools v0.44.0 // indirect
208208 google.golang.org/api v0.276.0 // indirect
209209 google.golang.org/genai v1.54.0 // indirect
210− google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect
210+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect
211211 google.golang.org/grpc v1.80.0 // indirect
212212 google.golang.org/protobuf v1.36.11 // indirect
213213 gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect
214214 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
215215 gopkg.in/warnings.v0 v0.1.2 // indirect
216216 gopkg.in/yaml.v2 v2.4.0 // indirect
217− modernc.org/libc v1.72.0 // indirect
217+ modernc.org/libc v1.72.1 // indirect
218218 modernc.org/mathutil v1.7.1 // indirect
219219 modernc.org/memory v1.11.0 // indirect
220220)
go.sum+64−64
@@ -2,12 +2,12 @@ charm.land/bubbles/v2 v2.1.0 h1:YSnNh5cPYlYjPxRrzs5VEn3vwhtEn3jVGRBT3M7/I0g=
22charm.land/bubbles/v2 v2.1.0/go.mod h1:l97h4hym2hvWBVfmJDtrEHHCtkIKeTEb3TTJ4ZOB3wY=
33charm.land/bubbletea/v2 v2.0.6 h1:UHN/91OyuhaOFGSrBXQ/hMZD8IO1Uc4BvHlgHXL2WJo=
44charm.land/bubbletea/v2 v2.0.6/go.mod h1:MH/D8ZLlN3op37vQvijKuU29g3rqTp+aQapURFonF9g=
5−charm.land/catwalk v0.37.14 h1:PYz9777U3vnLgHQWriQA6lHwSSZLBnyvCF77E46W02M=
6−charm.land/catwalk v0.37.14/go.mod h1:IvMXm7qMKvYuWWlN5A4dA0bTgYg4clG1GAeU9/NlY0w=
5+charm.land/catwalk v0.39.5 h1:YH64kRKGZyPJeAwTfguO+B8zeltag2n1mPiI1kJTmsM=
6+charm.land/catwalk v0.39.5/go.mod h1:IvMXm7qMKvYuWWlN5A4dA0bTgYg4clG1GAeU9/NlY0w=
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.21.0 h1:fYeW5axjn7KxJFvXavYhToZDG83zM+or1XEpHqX/GAo=
10−charm.land/fantasy v0.21.0/go.mod h1:GYYvvDAS3u/Wpb5hX0VxCJPhQCaffHNNeBRtGw04IBI=
9+charm.land/fantasy v0.23.0 h1:pocjwC5CxfEg1Bpwb0raML2d5ijo3op33Mmd6hYJyo4=
10+charm.land/fantasy v0.23.0/go.mod h1:4yzSsd9XmFEVjRnF1P0LTEbLTmQX6OLnPkrHaf7iruo=
1111charm.land/glamour/v2 v2.0.0 h1:IDBoqLEy7Hdpb9VOXN+khLP/XSxtJy1VsHuW/yF87+U=
1212charm.land/glamour/v2 v2.0.0/go.mod h1:kjq9WB0s8vuUYZNYey2jp4Lgd9f4cKdzAw88FZtpj/w=
1313charm.land/lipgloss/v2 v2.0.3 h1:yM2zJ4Cf5Y51b7RHIwioil4ApI/aypFXXVHSwlM6RzU=
@@ -47,8 +47,8 @@ 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.23.1 h1:nv2AVZdTyClGbVQkIzlDm/rnhk1E9bU9nXwmZ/Vk/iY=
51−github.com/alecthomas/chroma/v2 v2.23.1/go.mod h1:NqVhfBR0lte5Ouh3DcthuUCTUpDC9cxBOfyMbMQPs3o=
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=
5454github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
@@ -58,8 +58,8 @@ github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z
5858github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
5959github.com/aws/aws-sdk-go-v2 v1.41.6 h1:1AX0AthnBQzMx1vbmir3Y4WsnJgiydmnJjiLu+LvXOg=
6060github.com/aws/aws-sdk-go-v2 v1.41.6/go.mod h1:dy0UzBIfwSeot4grGvY1AqFWN5zgziMmWGzysDnHFcQ=
61−github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o=
62−github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI=
61+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 h1:adBsCIIpLbLmYnkQU+nAChU5yhVTvu5PerROm+/Kq2A=
62+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9/go.mod h1:uOYhgfgThm/ZyAuJGNQ5YgNyOlYfqnGpTHXvk3cpykg=
6363github.com/aws/aws-sdk-go-v2/config v1.32.16 h1:Q0iQ7quUgJP0F/SCRTieScnaMdXr9h/2+wze1u3cNeM=
6464github.com/aws/aws-sdk-go-v2/config v1.32.16/go.mod h1:duCCnJEFqpt2RC6no1iK6q+8HpwOAkiUua0pY507dQc=
6565github.com/aws/aws-sdk-go-v2/credentials v1.19.15 h1:fyvgWTszojq8hEnMi8PPBTvZdTtEVmAVyo+NFLHBhH4=
@@ -84,8 +84,8 @@ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 h1:oK/njaL8GtyEihkWMD4k3Vg
8484github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20/go.mod h1:JHs8/y1f3zY7U5WcuzoJ/yAYGYtNIVPKLIbp61euvmg=
8585github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 h1:ks8KBcZPh3PYISr5dAiXCM5/Thcuxk8l+PG4+A0exds=
8686github.com/aws/aws-sdk-go-v2/service/sts v1.42.0/go.mod h1:pFw33T0WLvXU3rw1WBkpMlkgIn54eCB5FYLhjDc9Foo=
87−github.com/aws/smithy-go v1.25.0 h1:Sz/XJ64rwuiKtB6j98nDIPyYrV1nVNJ4YU74gttcl5U=
88−github.com/aws/smithy-go v1.25.0/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
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=
8989github.com/aymanbagabas/go-nativeclipboard v0.1.3 h1:FmAWHPTwneAixu7uGDn3cL42xPlUCdNp2J8egMn3P1k=
9090github.com/aymanbagabas/go-nativeclipboard v0.1.3/go.mod h1:2o7MyZwwi4pmXXpOpvOS5FwaHyoCIUks0ktjUvB0EoE=
9191github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ12Gv5o=
@@ -156,8 +156,8 @@ github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMS
156156github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
157157github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
158158github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
159−github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
160−github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
159+github.com/dlclark/regexp2 v1.12.0 h1:0j4c5qQmnC6XOWNjP3PIXURXN2gWx76rd3KvgdPkCz8=
160+github.com/dlclark/regexp2 v1.12.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
161161github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
162162github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
163163github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
@@ -225,8 +225,8 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6
225225github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
226226github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
227227github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
228−github.com/google/jsonschema-go v0.4.2 h1:tmrUohrwoLZZS/P3x7ex0WAVknEkBZM46iALbcqoRA8=
229−github.com/google/jsonschema-go v0.4.2/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
228+github.com/google/jsonschema-go v0.4.3 h1:/DBOLZTfDow7pe2GmaJNhltueGTtDKICi8V8p+DQPd0=
229+github.com/google/jsonschema-go v0.4.3/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
230230github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs=
231231github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
232232github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
@@ -248,8 +248,8 @@ github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUq
248248github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
249249github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
250250github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
251−github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E=
252−github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
251+github.com/invopop/jsonschema v0.14.0 h1:MHQqLhvpNUZfw+hM3AZDYK7jxO8FZoQeQM77g8iyZjg=
252+github.com/invopop/jsonschema v0.14.0/go.mod h1:ygm6C2EaVNMBDPpaPlnOA2pFAxBnxGjFlMZABxm9n2I=
253253github.com/itchyny/gojq v0.12.19 h1:ttXA0XCLEMoaLOz5lSeFOZ6u6Q3QxmG46vfgI4O0DEs=
254254github.com/itchyny/gojq v0.12.19/go.mod h1:5galtVPDywX8SPSOrqjGxkBeDhSxEW1gSxoy7tn1iZY=
255255github.com/itchyny/timefmt-go v0.1.8 h1:1YEo1JvfXeAHKdjelbYr/uCuhkybaHCeTkH8Bo791OI=
@@ -264,14 +264,14 @@ github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d h1:o
264264github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d/go.mod h1:SV0W0APWP9MZ1/gfDQ/NzzTlWdIgYZ/ZbpN4d/UXRYw=
265265github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
266266github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
267−github.com/kaptinlin/go-i18n v0.3.0 h1:wP76dvYg04bvwTb+8NB+CmdZ2kL7lSSCQ9B/kFv7QHo=
268−github.com/kaptinlin/go-i18n v0.3.0/go.mod h1:pVcu9qsW5pOIOoZFJXesRYmLos1vMQrby70JPAoWmJU=
269−github.com/kaptinlin/jsonpointer v0.4.17 h1:mY9k8ciWncxbsECyaxKnR0MdmxamNdp2tLQkAKVrtSk=
270−github.com/kaptinlin/jsonpointer v0.4.17/go.mod h1:SsfsjqnHG5zuKo1DTBzk1VknaHlL4osHw+X9kZKukpU=
271−github.com/kaptinlin/jsonschema v0.7.7 h1:41BlQJ9dskH0oE5DSzBUrl/w4JQYIr6N6L0B5GNyDoM=
272−github.com/kaptinlin/jsonschema v0.7.7/go.mod h1:rKjWfyySHSxAD7Li2ctYkPlOu960igoKBvZ2ADRtd5Q=
273−github.com/kaptinlin/messageformat-go v0.4.19 h1:A5kuuZ1ybXDQ7kD1aoEWGAOemX7hLsMY0yolgSbgpRI=
274−github.com/kaptinlin/messageformat-go v0.4.19/go.mod h1:utSDTfiXTxl66OC5RIEuObLH7Ue3YjbA2X86SYMBYWg=
267+github.com/kaptinlin/go-i18n v0.4.4 h1:3XrUYyLOykcd1K3gm4j7ndrF8YLIYrJjtbKGr/nF2Kw=
268+github.com/kaptinlin/go-i18n v0.4.4/go.mod h1:mU/7BH4molY5lGZYBwBRKAaiJ70dWRHuqmQ0/pFLGno=
269+github.com/kaptinlin/jsonpointer v0.4.19 h1:dEkwEnvn9jJCofrwKGxfKaPNbDOQEf3UEbEumn4xZBg=
270+github.com/kaptinlin/jsonpointer v0.4.19/go.mod h1:Mo7+DX8RlQTFqS4dnYJl0izSP4ob+Rl5xO/mGDETgaU=
271+github.com/kaptinlin/jsonschema v0.7.11 h1:h63Lb3Q4FBSWeWiAGefNPEVPNsOvgn91ATmf25X0yRs=
272+github.com/kaptinlin/jsonschema v0.7.11/go.mod h1:cJ8QIhwq3V/Yyh3sXRNt8w3sM943bNIbwnPTpBTXn3s=
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=
275275github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE=
276276github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
277277github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE=
@@ -294,8 +294,8 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN
294294github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
295295github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
296296github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
297−github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs=
298−github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
297+github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
298+github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
299299github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw=
300300github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
301301github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
@@ -304,8 +304,8 @@ github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwX
304304github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
305305github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
306306github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
307−github.com/modelcontextprotocol/go-sdk v1.5.0 h1:CHU0FIX9kpueNkxuYtfYQn1Z0slhFzBZuq+x6IiblIU=
308−github.com/modelcontextprotocol/go-sdk v1.5.0/go.mod h1:gggDIhoemhWs3BGkGwd1umzEXCEMMvAnhTrnbXJKKKA=
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=
309309github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
310310github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
311311github.com/muesli/mango v0.1.0 h1:DZQK45d2gGbql1arsYA4vfg4d7I9Hfx5rX/GCmzsAvI=
@@ -316,10 +316,10 @@ github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe
316316github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
317317github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
318318github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
319−github.com/ncruces/go-sqlite3 v0.33.3 h1:6jCR3KuGvJSEwhaQrkHDGeIe2qCQ6nOUDNsPz7ZIotw=
320−github.com/ncruces/go-sqlite3 v0.33.3/go.mod h1:t2Osfw0wcKzJTgv2EvrkTtVLqlbKTA5Yvwb2ypAlBcY=
321−github.com/ncruces/go-sqlite3-wasm v1.1.1-0.20260409221933-87e4b35a38d0 h1:ymE9H30x1AyW5VfMNkJC9teuI2W1jjMsQS7kc6zl6Tg=
322−github.com/ncruces/go-sqlite3-wasm v1.1.1-0.20260409221933-87e4b35a38d0/go.mod h1:/H3+JykPsfSlvKbOxNSx9kKwm3ecqQGzyCs1e9KkNsU=
319+github.com/ncruces/go-sqlite3 v0.34.0 h1:q2I6wHTLWIoz6ehYkKdG5dGQc66eJv7ZGnekhvuMfK8=
320+github.com/ncruces/go-sqlite3 v0.34.0/go.mod h1:qpBxsSdGPnO9K5OExuv5GEsrGQ7Rk6JsJFH6wn2DwwU=
321+github.com/ncruces/go-sqlite3-wasm/v2 v2.1.35300 h1:cRdxCt3BDfMu0vfSdoqaAPD+dzIXPkGREjqyZMLN2Ak=
322+github.com/ncruces/go-sqlite3-wasm/v2 v2.1.35300/go.mod h1:R2kJLPoSA/GBX/b8x7zwOq/KLAw6rLMY1l3Hi76SQIo=
323323github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
324324github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
325325github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M=
@@ -331,10 +331,12 @@ github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY=
331331github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc=
332332github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
333333github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
334−github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
335−github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
336−github.com/pierrec/lz4/v4 v4.1.25 h1:kocOqRffaIbU5djlIBr7Wh+cx82C0vtFb0fOurZHqD0=
337−github.com/pierrec/lz4/v4 v4.1.25/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
334+github.com/pb33f/ordered-map/v2 v2.3.1 h1:5319HDO0aw4DA4gzi+zv4FXU9UlSs3xGZ40wcP1nBjY=
335+github.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=
338+github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY=
339+github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
338340github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
339341github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
340342github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
@@ -347,10 +349,10 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1
347349github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
348350github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
349351github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
350−github.com/posthog/posthog-go v1.12.1 h1:qZMHfC0frQOR1LT4js3ns+pXbDIyFsV+kWpvJEok3ms=
351−github.com/posthog/posthog-go v1.12.1/go.mod h1:xsVOW9YImilUcazwPNEq4PJDqEZf2KeCS758zXjwkPg=
352−github.com/pressly/goose/v3 v3.27.0 h1:/D30gVTuQhu0WsNZYbJi4DMOsx1lNq+6SkLe+Wp59BM=
353−github.com/pressly/goose/v3 v3.27.0/go.mod h1:3ZBeCXqzkgIRvrEMDkYh1guvtoJTU5oMMuDdkutoM78=
352+github.com/posthog/posthog-go v1.12.4 h1:fAqTAGgLQFZADRg3AJvSSoP0hwEIs940OE8AmL8/H8c=
353+github.com/posthog/posthog-go v1.12.4/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=
354356github.com/qjebbs/go-jsons v1.0.0-alpha.5 h1:U2PPDxeKI1MMOSw7e7xyxhwH9Ggc7UrDvaRIkJ+l0n8=
355357github.com/qjebbs/go-jsons v1.0.0-alpha.5/go.mod h1:wNJrtinHyC3YSf6giEh4FJN8+yZV7nXBjvmfjhBIcw4=
356358github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
@@ -417,8 +419,6 @@ github.com/u-root/u-root v0.14.1-0.20250807200646-5e7721023dc7 h1:ax+jBy7xFhh+Ka
417419github.com/u-root/u-root v0.14.1-0.20250807200646-5e7721023dc7/go.mod h1:/0Qr7qJeDwWxoKku2xKQ4Szc+SwBE3g9VE8jNiamsmc=
418420github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 h1:pyC9PaHYZFgEKFdlp3G8RaCKgVpHZnecvArXvPXcFkM=
419421github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
420−github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
421−github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
422422github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
423423github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
424424github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
@@ -465,8 +465,8 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v
465465golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
466466golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
467467golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
468−golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA=
469−golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ=
468+golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM=
469+golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80=
470470golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
471471golang.org/x/image v0.38.0 h1:5l+q+Y9JDC7mBOMjo4/aPhMDcxEptsX+Tt3GgRQRPuE=
472472golang.org/x/image v0.38.0/go.mod h1:/3f6vaXC+6CEanU4KJxbcUZyEePbyKbaLoDOe4ehFYY=
@@ -475,8 +475,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
475475golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
476476golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
477477golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
478−golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI=
479−golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY=
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=
480480golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
481481golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
482482golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
@@ -550,8 +550,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
550550golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
551551golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
552552golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
553−golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s=
554−golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0=
553+golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
554+golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
555555golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
556556gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
557557gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
@@ -559,12 +559,12 @@ google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY=
559559google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw=
560560google.golang.org/genai v1.54.0 h1:ZQCa70WMTJDI11FdqWCzGvZ5PanpcpfoO6jl/lrSnGU=
561561google.golang.org/genai v1.54.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk=
562−google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 h1:aLsVTW0lZ8+IY5u/ERjZSCvAmhuR7slKzyha3YikDNA=
563−google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478/go.mod h1:YJAzKjfHIUHb9T+bfu8L7mthAp7VVXQBUs1PLdBWS7M=
564−google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec=
565−google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc=
566−google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw=
567−google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
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=
568568google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM=
569569google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4=
570570google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
@@ -590,10 +590,10 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
590590gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
591591gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
592592gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
593−modernc.org/cc/v4 v4.27.3 h1:uNCgn37E5U09mTv1XgskEVUJ8ADKpmFMPxzGJ0TSo+U=
594−modernc.org/cc/v4 v4.27.3/go.mod h1:3YjcbCqhoTTHPycJDRl2WZKKFj0nwcOIPBfEZK0Hdk8=
595−modernc.org/ccgo/v4 v4.32.4 h1:L5OB8rpEX4ZsXEQwGozRfJyJSFHbbNVOoQ59DU9/KuU=
596−modernc.org/ccgo/v4 v4.32.4/go.mod h1:lY7f+fiTDHfcv6YlRgSkxYfhs+UvOEEzj49jAn2TOx0=
593+modernc.org/cc/v4 v4.28.1 h1:XpLbkYVQ24E8tX5u8+yWGvaxerxkR/S4zqxI8ZoSBuc=
594+modernc.org/cc/v4 v4.28.1/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI=
595+modernc.org/ccgo/v4 v4.33.0 h1:dspBCm75jsj8Y/ufwAMVfe375L2iYdMyQ2QG/v3hL54=
596+modernc.org/ccgo/v4 v4.33.0/go.mod h1:+RhXBoRYzRwaH21mV/aj6XvQRDtfjcZfAlPMsQo8CR0=
597597modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM=
598598modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU=
599599modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
@@ -602,18 +602,18 @@ modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo=
602602modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY=
603603modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
604604modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
605−modernc.org/libc v1.72.0 h1:IEu559v9a0XWjw0DPoVKtXpO2qt5NVLAnFaBbjq+n8c=
606−modernc.org/libc v1.72.0/go.mod h1:tTU8DL8A+XLVkEY3x5E/tO7s2Q/q42EtnNWda/L5QhQ=
605+modernc.org/libc v1.72.1 h1:db1xwJ6u1kE3KHTFTTbe2GCrczHPKzlURP0aDC4NGD0=
606+modernc.org/libc v1.72.1/go.mod h1:HRMiC/PhPGLIPM7GzAFCbI+oSgE3dhZ8FWftmRrHVlY=
607607modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
608608modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
609609modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
610610modernc.org/memory v1.11.0/go.mod h1:/JP4VbVC+K5sU2wZi9bHoq2MAkCnrt2r98UGeSK7Mjw=
611−modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
612−modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
611+modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg=
612+modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
613613modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
614614modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
615−modernc.org/sqlite v1.49.1 h1:dYGHTKcX1sJ+EQDnUzvz4TJ5GbuvhNJa8Fg6ElGx73U=
616−modernc.org/sqlite v1.49.1/go.mod h1:m0w8xhwYUVY3H6pSDwc3gkJ/irZT/0YEXwBlhaxQEew=
615+modernc.org/sqlite v1.50.0 h1:eMowQSWLK0MeiQTdmz3lqoF5dqclujdlIKeJA11+7oM=
616+modernc.org/sqlite v1.50.0/go.mod h1:m0w8xhwYUVY3H6pSDwc3gkJ/irZT/0YEXwBlhaxQEew=
617617modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
618618modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
619619modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
internal/agent/coordinator.go+30−15
@@ -281,20 +281,7 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
281281 return options
282282 }
283283
284− providerType := providerCfg.Type
285− if providerType == "hyper" {
286− if strings.Contains(model.CatwalkCfg.ID, "claude") {
287− providerType = anthropic.Name
288− } else if strings.Contains(model.CatwalkCfg.ID, "gpt") {
289− providerType = openai.Name
290− } else if strings.Contains(model.CatwalkCfg.ID, "gemini") {
291− providerType = google.Name
292− } else {
293− providerType = openaicompat.Name
294− }
295− }
296−
297− switch providerType {
284+ switch providerCfg.Type {
298285 case openai.Name, azure.Name:
299286 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
300287 if !hasReasoningEffort && model.ModelCfg.ReasoningEffort != "" {
@@ -374,11 +361,39 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
374361 if err == nil {
375362 options[google.Name] = parsed
376363 }
377− case openaicompat.Name:
364+ case openaicompat.Name, hyper.Name:
378365 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
379366 if !hasReasoningEffort && model.ModelCfg.ReasoningEffort != "" {
380367 mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort
381368 }
369+
370+ extraBody := make(map[string]any)
371+
372+ // "reasoning effort" is a standard OpenAI field, but "thinking" is not.
373+ // Setting it in the right way for each provider.
374+ // TODO: Abstract this in Fantasy somehow?
375+ // TODO: Allow custom providers to specify how to set this?
376+ switch providerCfg.ID {
377+ case hyper.Name:
378+ extraBody["thinking"] = model.ModelCfg.Think
379+ case string(catwalk.InferenceProviderIoNet):
380+ extraBody["chat_template_kwargs"] = map[string]any{
381+ "thinking": model.ModelCfg.Think,
382+ }
383+ case string(catwalk.InferenceProviderZAI):
384+ if model.ModelCfg.Think {
385+ extraBody["thinking"] = map[string]any{
386+ "type": "enabled",
387+ }
388+ } else {
389+ extraBody["thinking"] = map[string]any{
390+ "type": "disabled",
391+ }
392+ }
393+ }
394+
395+ mergedOptions["extra_body"] = extraBody
396+
382397 parsed, err := openaicompat.ParseOptions(mergedOptions)
383398 if err == nil {
384399 options[openaicompat.Name] = parsed
internal/agent/hyper/provider.go+42−15
@@ -3,34 +3,24 @@ package hyper
33
44import (
55 "cmp"
6+ "context"
67 _ "embed"
78 "encoding/json"
9+ "fmt"
810 "log/slog"
11+ "net/http"
912 "os"
10− "strconv"
1113 "sync"
14+ "time"
1215
1316 "charm.land/catwalk/pkg/catwalk"
1417)
1518
16−//go:generate wget -O provider.json https://hyper.charm.land/api/v1/provider
19+//go:generate wget -O provider.json https://hyper.charm.land/v1/provider
1720
1821//go:embed provider.json
1922var embedded []byte
2023
21−// Enabled returns true if hyper is enabled.
22−var Enabled = sync.OnceValue(func() bool {
23− b, _ := strconv.ParseBool(
24− cmp.Or(
25− os.Getenv("HYPER"),
26− os.Getenv("HYPERCRUSH"),
27− os.Getenv("HYPER_ENABLE"),
28− os.Getenv("HYPER_ENABLED"),
29− ),
30− )
31− return b
32−})
33−
3424// Embedded returns the embedded Hyper provider.
3525var Embedded = sync.OnceValue(func() catwalk.Provider {
3626 var provider catwalk.Provider
@@ -46,6 +36,8 @@ var Embedded = sync.OnceValue(func() catwalk.Provider {
4636const (
4737 // Name is the default name of this meta provider.
4838 Name = "hyper"
39+ // DisplayName is the display name of Hyper.
40+ DisplayName = "Charm Hyper"
4941 // defaultBaseURL is the default proxy URL.
5042 defaultBaseURL = "https://hyper.charm.land"
5143)
@@ -54,3 +46,38 @@ const (
5446var BaseURL = sync.OnceValue(func() string {
5547 return cmp.Or(os.Getenv("HYPER_URL"), defaultBaseURL)
5648})
49+
50+// FetchCredits calls the Hyper /v1/credits endpoint and returns the remaining
51+// credits count.
52+func FetchCredits(ctx context.Context, apiKey string) (int, error) {
53+ req, err := http.NewRequestWithContext(
54+ ctx,
55+ http.MethodGet,
56+ BaseURL()+"/v1/credits",
57+ nil,
58+ )
59+ if err != nil {
60+ return 0, fmt.Errorf("could not create request: %w", err)
61+ }
62+ req.Header.Set("Authorization", "Bearer "+apiKey)
63+
64+ client := &http.Client{Timeout: 10 * time.Second}
65+ resp, err := client.Do(req)
66+ if err != nil {
67+ return 0, fmt.Errorf("failed to make request: %w", err)
68+ }
69+ defer resp.Body.Close() //nolint:errcheck
70+
71+ if resp.StatusCode != http.StatusOK {
72+ return 0, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
73+ }
74+
75+ var result struct {
76+ Balance int `json:"balance"`
77+ }
78+ if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
79+ return 0, fmt.Errorf("failed to decode response: %w", err)
80+ }
81+
82+ return result.Balance, nil
83+}
internal/agent/hyper/provider.json+101−5
@@ -6,6 +6,42 @@
66 "default_large_model_id": "kimi-k2.5",
77 "default_small_model_id": "gpt-oss-120b",
88 "models": [
9+ {
10+ "id": "deepseek-v4-flash",
11+ "name": "DeepSeek V4 Flash",
12+ "cost_per_1m_in": 1.55,
13+ "cost_per_1m_out": 2.28,
14+ "cost_per_1m_in_cached": 0.38,
15+ "cost_per_1m_out_cached": 0,
16+ "context_window": 65000,
17+ "default_max_tokens": 6500,
18+ "can_reason": true,
19+ "supports_attachments": false
20+ },
21+ {
22+ "id": "deepseek-v4-pro",
23+ "name": "DeepSeek V4 Pro",
24+ "cost_per_1m_in": 4.45,
25+ "cost_per_1m_out": 5.5,
26+ "cost_per_1m_in_cached": 0.35,
27+ "cost_per_1m_out_cached": 0,
28+ "context_window": 600000,
29+ "default_max_tokens": 60000,
30+ "can_reason": true,
31+ "supports_attachments": false
32+ },
33+ {
34+ "id": "gemma-4-26b-a4b-it",
35+ "name": "Gemma 4 26B A4B",
36+ "cost_per_1m_in": 0.145,
37+ "cost_per_1m_out": 0.5,
38+ "cost_per_1m_in_cached": 0.08,
39+ "cost_per_1m_out_cached": 0,
40+ "context_window": 262144,
41+ "default_max_tokens": 26214,
42+ "can_reason": true,
43+ "supports_attachments": false
44+ },
945 {
1046 "id": "glm-5",
1147 "name": "GLM-5",
@@ -21,7 +57,7 @@
2157 {
2258 "id": "glm-5.1",
2359 "name": "GLM-5.1",
24− "cost_per_1m_in": 1.06,
60+ "cost_per_1m_in": 1.5,
2561 "cost_per_1m_out": 4.4,
2662 "cost_per_1m_in_cached": 0.26,
2763 "cost_per_1m_out_cached": 0,
@@ -63,14 +99,74 @@
6399 {
64100 "id": "kimi-k2.6",
65101 "name": "Kimi K2.6",
66− "cost_per_1m_in": 0.8,
67− "cost_per_1m_out": 4,
68− "cost_per_1m_in_cached": 0.25,
102+ "cost_per_1m_in": 0.74,
103+ "cost_per_1m_out": 3.49,
104+ "cost_per_1m_in_cached": 0.14,
69105 "cost_per_1m_out_cached": 0,
70− "context_window": 262144,
106+ "context_window": 262142,
71107 "default_max_tokens": 26214,
72108 "can_reason": true,
73109 "supports_attachments": true
110+ },
111+ {
112+ "id": "llama-3.3-70b-instruct",
113+ "name": "Llama 3.3 70B Instruct",
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,
118+ "context_window": 128000,
119+ "default_max_tokens": 12800,
120+ "can_reason": true,
121+ "supports_attachments": false
122+ },
123+ {
124+ "id": "llama-4-maverick-17b-128e-instruct-fp8",
125+ "name": "Llama 4 Maverick 17B 128E Instruct FP8",
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,
130+ "context_window": 430000,
131+ "default_max_tokens": 43000,
132+ "can_reason": true,
133+ "supports_attachments": true
134+ },
135+ {
136+ "id": "mistral-large-instruct-2411",
137+ "name": "Mistral Large Instruct 2411",
138+ "cost_per_1m_in": 2,
139+ "cost_per_1m_out": 6,
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,
145+ "supports_attachments": true
146+ },
147+ {
148+ "id": "qwen3-coder-480b-a35b-instruct-int4-mixed-ar",
149+ "name": "Qwen3 Coder 480B A35B Instruct INT4 Mixed AR",
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,
154+ "context_window": 106000,
155+ "default_max_tokens": 10600,
156+ "can_reason": false,
157+ "supports_attachments": false
158+ },
159+ {
160+ "id": "qwen3-next-80b-a3b-instruct",
161+ "name": "Qwen3 Next 80B A3B Instruct",
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,
166+ "context_window": 262144,
167+ "default_max_tokens": 26214,
168+ "can_reason": false,
169+ "supports_attachments": false
74170 }
75171 ]
76172}
internal/agent/testdata/TestCoderAgent/glm-5.1/bash_tool.yaml+565−259
@@ -2,6 +2,104 @@
22version: 2
33interactions:
44- id: 0
5+ request:
6+ proto: HTTP/1.1
7+ proto_major: 1
8+ proto_minor: 1
9+ content_length: 33682
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 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.\",\"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}"
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-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29+
30+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
31+
32+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
33+
34+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
35+
36+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
37+
38+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
39+
40+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
41+
42+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" printing"},"finish_reason":null}]}
43+
44+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
45+
46+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
47+
48+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_1128d2594e71440e87395176","type":"function","index":0,"function":{"name":"bash","arguments":""}}]},"finish_reason":null}]}
49+
50+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"command\":\"echo 'hello bash' \u003e test.txt\",\"description\":\"Create test.txt with content\"}"}}]},"finish_reason":null}]}
51+
52+ data: {"id":"chatcmpl-e88f6a52ff032a473793901c","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":709,"completion_tokens":37,"total_tokens":7786}}
53+
54+ data: [DONE]
55+
56+ headers:
57+ Content-Type:
58+ - text/event-stream
59+ status: 200 OK
60+ code: 200
61+ duration: 3.665328167s
62+- id: 1
63+ request:
64+ proto: HTTP/1.1
65+ proto_major: 1
66+ proto_minor: 1
67+ content_length: 34072
68+ host: ""
69+ 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_1128d2594e71440e87395176\",\"function\":{\"arguments\":\"{\\\"command\\\":\\\"echo 'hello bash' > test.txt\\\",\\\"description\\\":\\\"Create test.txt with content\\\"}\",\"name\":\"bash\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Create a file using bash without printing timestamp.\"},{\"content\":\"no output\",\"tool_call_id\":\"call_1128d2594e71440e87395176\",\"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.\",\"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}"
70+ headers:
71+ Accept:
72+ - application/json
73+ Content-Type:
74+ - application/json
75+ User-Agent:
76+ - Charm-Crush/devel (https://charm.land/crush)
77+ url: https://hyper.charm.land/v1/chat/completions
78+ method: POST
79+ response:
80+ proto: HTTP/2.0
81+ proto_major: 2
82+ proto_minor: 0
83+ content_length: -1
84+ uncompressed: true
85+ body: |+
86+ data: {"id":"chatcmpl-8545d39e9f867f4ae105f086","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
87+
88+ data: {"id":"chatcmpl-8545d39e9f867f4ae105f086","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
89+
90+ data: {"id":"chatcmpl-8545d39e9f867f4ae105f086","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
91+
92+ data: {"id":"chatcmpl-8545d39e9f867f4ae105f086","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":39,"completion_tokens":4,"total_tokens":7787}}
93+
94+ data: [DONE]
95+
96+ headers:
97+ Content-Type:
98+ - text/event-stream
99+ status: 200 OK
100+ code: 200
101+ duration: 3.005432041s
102+- id: 2
5103 request:
6104 proto: HTTP/1.1
7105 proto_major: 1
@@ -25,461 +123,669 @@ interactions:
25123 content_length: -1
26124 uncompressed: true
27125 body: |+
28− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29127
30− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
31129
32− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
33131
34− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
35133
36− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
37135
38− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
39137
40− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
41139
42− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
43141
44− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
45143
46− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
47145
48− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
49147
50− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
51149
52− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
53151
54− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
55153
56− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Language"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
57155
58− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
59157
60− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
61159
62− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" named"},"finish_reason":null}]}
63161
64− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
65163
66− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
67165
68− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
69167
70− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
71169
72− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
73171
74− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
75173
76− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
77175
78− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
79177
80− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" command"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" do"},"finish_reason":null}]}
81179
82− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" not"},"finish_reason":null}]}
83181
84− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
85183
86− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
87185
88− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
89187
90− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
91189
92− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
93191
94− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
95193
96− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
97195
98− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
99197
100− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
101199
102− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
103201
104− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
105203
106− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
107205
108− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
109207
110− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Less"},"finish_reason":null}]}
111209
112− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
113211
114− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" command"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
115213
116− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
117215
118− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
119217
120− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
121219
122− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
123221
124− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
125223
126− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
127225
128− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
129227
130− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
131229
132− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
133231
134− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
135233
136− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Create"},"finish_reason":null}]}
137235
138− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
139237
140− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"B"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
141239
142− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ash"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
143241
144− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" command"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
145243
146− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
147245
148− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
149247
150− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
151249
152− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
153251
154− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
155253
156− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
157255
158− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
159257
160− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
161259
162− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
163261
164− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
165263
166− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
167265
168− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
169267
170− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
171269
172− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
173271
174− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
175273
176− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
177275
178− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
179277
180− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
181279
182− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
183281
184− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
185283
186− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
187285
188− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
189287
190− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" command"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
191289
192− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
193291
194− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
195293
196− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
197295
198− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
199297
200− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
201299
202− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
203301
204− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
205303
206− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
207305
208− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
209307
210− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
211309
212− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
213311
214− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
215313
216− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
217315
218− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
219317
220− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
221319
222− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
223321
224− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
225323
226− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
227325
228− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
229327
230− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
231329
232− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
233331
234− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
235333
236− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
237335
238− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
239337
240− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
241339
242− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
243341
244− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
245343
246− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
247345
248− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
249347
250− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
251349
252− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
253351
254− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
255353
256− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
257355
258− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
259357
260− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
261359
262− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
263361
264− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
265363
266− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
267365
268− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
269367
270− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
271369
272− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
273371
274− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
275373
276− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
277375
278− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
279377
280− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
281379
282− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
283381
284− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
285383
286− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
287385
288− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
289387
290− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
291389
292− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
293391
294− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
295393
296− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
297395
298− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
299397
300− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
301399
302− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
303401
304− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
305403
306− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
307405
308− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
309407
310− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
311409
312− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
313411
314− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
315413
316− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
317415
318− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
319417
320− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
321419
322− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
323421
324− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
325423
326− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
327425
328− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
329427
330− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
331429
332− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
333431
334− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
335433
336− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
337435
338− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
339437
340− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" period"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
341439
342− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
343441
344− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
345443
346− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
347445
348− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
349447
350− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"B"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
351449
352− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"ash"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
353451
354− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" command"},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
355453
356− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
357455
358− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" create"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
359457
360− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
361459
362− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
363461
364− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
365463
366− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
367465
368− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" bash"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
369467
370− data: {"id":"chatcmpl-e969f57068607f238298e1c4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":179,"total_tokens":398}}
468+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
371469
372− data: [DONE]
470+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
373471
374− headers:
375− Content-Type:
376− - text/event-stream
377− status: 200 OK
378− code: 200
379− duration: 422.115958ms
380−- id: 1
381− request:
382− proto: HTTP/1.1
383− proto_major: 1
384− proto_minor: 1
385− content_length: 33682
386− host: ""
387− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
388− headers:
389− Accept:
390− - application/json
391− Content-Type:
392− - application/json
393− User-Agent:
394− - Charm-Crush/devel (https://charm.land/crush)
395− url: https://hyper.charm.land/v1/chat/completions
396− method: POST
397− response:
398− proto: HTTP/2.0
399− proto_major: 2
400− proto_minor: 0
401− content_length: -1
402− uncompressed: true
403− body: |+
404− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
405473
406− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Simple"},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
407475
408− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" task"},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
409477
410− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" -"},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
411479
412− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
413481
414− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
415483
416− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
417485
418− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
419487
420− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" specific"},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
421489
422− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
490+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
423491
424− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
492+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
425493
426− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
494+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
427495
428− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
496+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
429497
430− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
498+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
431499
432− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" printing"},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
433501
434− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
502+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
435503
436− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
437505
438− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_83c8d2ffea684ef49a39b7f6","type":"function","index":0,"function":{"name":"bash","arguments":""}}]},"finish_reason":null}]}
506+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
439507
440− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"command\":\"echo 'hello bash' \u003e /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool/test.txt\",\"description\":\"Create test.txt with content\"}"}}]},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Could"},"finish_reason":null}]}
441509
442− data: {"id":"chatcmpl-5ef96ea9d6e37c4f5390151e","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":5,"completion_tokens":60,"total_tokens":7809}}
510+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
443511
444− data: [DONE]
512+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
445513
446− headers:
447− Content-Type:
448− - text/event-stream
449− status: 200 OK
450− code: 200
451− duration: 8.226233625s
452−- id: 2
453− request:
454− proto: HTTP/1.1
455− proto_major: 1
456− proto_minor: 1
457− content_length: 34158
458− host: ""
459− 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_83c8d2ffea684ef49a39b7f6\",\"function\":{\"arguments\":\"{\\\"command\\\":\\\"echo 'hello bash' > /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool/test.txt\\\",\\\"description\\\":\\\"Create test.txt with content\\\"}\",\"name\":\"bash\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Simple task - create a file with specific content using bash, without printing timestamp.\"},{\"content\":\"no output\",\"tool_call_id\":\"call_83c8d2ffea684ef49a39b7f6\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
460− headers:
461− Accept:
462− - application/json
463− Content-Type:
464− - application/json
465− User-Agent:
466− - Charm-Crush/devel (https://charm.land/crush)
467− url: https://hyper.charm.land/v1/chat/completions
468− method: POST
469− response:
470− proto: HTTP/2.0
471− proto_major: 2
472− proto_minor: 0
473− content_length: -1
474− uncompressed: true
475− body: |+
476− data: {"id":"chatcmpl-d53d988f4caa6753ac1dd6f3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
515+
516+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
517+
518+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
519+
520+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
521+
522+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
523+
524+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
525+
526+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
527+
528+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
529+
530+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
531+
532+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
533+
534+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
535+
536+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
537+
538+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
539+
540+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
541+
542+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
543+
544+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
545+
546+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
547+
548+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
549+
550+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
551+
552+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
553+
554+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
555+
556+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
557+
558+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
559+
560+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
561+
562+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
563+
564+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
565+
566+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
567+
568+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
569+
570+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
571+
572+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
573+
574+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
575+
576+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
577+
578+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
579+
580+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
581+
582+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
583+
584+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
585+
586+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
587+
588+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
589+
590+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
591+
592+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
593+
594+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
595+
596+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
597+
598+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
599+
600+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
601+
602+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
603+
604+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
605+
606+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
607+
608+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
609+
610+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
611+
612+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
613+
614+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
615+
616+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
617+
618+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
619+
620+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
621+
622+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
623+
624+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
625+
626+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
627+
628+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
629+
630+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
631+
632+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
633+
634+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
635+
636+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
637+
638+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
639+
640+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
641+
642+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
643+
644+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
645+
646+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
647+
648+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
649+
650+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
651+
652+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
653+
654+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
655+
656+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
657+
658+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
659+
660+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
661+
662+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
663+
664+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
665+
666+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
667+
668+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
669+
670+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
671+
672+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
673+
674+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
675+
676+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
677+
678+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
679+
680+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
681+
682+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
683+
684+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
685+
686+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
687+
688+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
689+
690+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ,"},"finish_reason":null}]}
691+
692+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
693+
694+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
695+
696+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
697+
698+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
699+
700+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
701+
702+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
703+
704+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
705+
706+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
707+
708+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
709+
710+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
711+
712+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
713+
714+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
715+
716+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
717+
718+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
719+
720+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
721+
722+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
723+
724+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
725+
726+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
727+
728+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
729+
730+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
731+
732+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
733+
734+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
735+
736+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
737+
738+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
739+
740+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
741+
742+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
743+
744+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
745+
746+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
747+
748+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
749+
750+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
751+
752+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
753+
754+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
755+
756+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
757+
758+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
759+
760+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
761+
762+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
763+
764+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
765+
766+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
767+
768+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
769+
770+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
771+
772+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
773+
774+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
775+
776+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
777+
778+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
779+
780+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" bash"},"finish_reason":null}]}
781+
782+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
477783
478− data: {"id":"chatcmpl-d53d988f4caa6753ac1dd6f3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
784+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" no"},"finish_reason":null}]}
479785
480− data: {"id":"chatcmpl-d53d988f4caa6753ac1dd6f3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
786+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" timestamp"},"finish_reason":null}]}
481787
482− data: {"id":"chatcmpl-d53d988f4caa6753ac1dd6f3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":55,"completion_tokens":4,"total_tokens":7803}}
788+ data: {"id":"chatcmpl-cfd9dbe8bea7d9b3c0cf1225","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":43,"completion_tokens":339,"total_tokens":558}}
483789
484790 data: [DONE]
485791
@@ -488,4 +794,4 @@ interactions:
488794 - text/event-stream
489795 status: 200 OK
490796 code: 200
491− duration: 3.896108458s
797+ duration: 591.878125ms
internal/agent/testdata/TestCoderAgent/glm-5.1/download_tool.yaml+321−145
@@ -25,213 +25,391 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"download"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" https"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"://"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"example"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-files"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" https"},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".online"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"://"},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-con"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"example"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"vert"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-files"},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".com"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".online"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/document"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-con"},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/t"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"vert"},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"xt"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".com"},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/example"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/document"},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/t"},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"xt"},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/example"},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
123123
124− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
125125
126− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
127127
128− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
129129
130− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
131131
132− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
133133
134− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
135135
136− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
137137
138− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
139139
140− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
141141
142− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
143143
144− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
145145
146− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
147147
148− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
149149
150− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
151151
152− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
153153
154− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
155155
156− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Save"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
157157
158− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
159159
160− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
161161
162− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
163163
164− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
165165
166− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
167167
168− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
169169
170− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
171171
172− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
173173
174− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
175175
176− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
177177
178− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
179179
180− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Save"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
181181
182− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
183183
184− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
185185
186− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
187187
188− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
189189
190− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
191191
192− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
193193
194− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" D"},"finish_reason":null}]}
195195
196− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
197197
198− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
199199
200− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
201201
202− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
203203
204− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
205205
206− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
207207
208− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
209209
210− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" only"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
211211
212− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
213213
214− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
215215
216− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
217217
218− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
219219
220− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
221221
222− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
223223
224− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Save"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
225225
226− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
227227
228− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
229229
230− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
231231
232− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" URL"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
233233
234− data: {"id":"chatcmpl-d1a5ef493c193e479231adc3","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":14,"completion_tokens":111,"total_tokens":333}}
234+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
235+
236+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
237+
238+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
239+
240+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
241+
242+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
243+
244+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
245+
246+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
247+
248+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
249+
250+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
251+
252+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
253+
254+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
255+
256+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
257+
258+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
259+
260+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
261+
262+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
263+
264+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
265+
266+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
267+
268+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
269+
270+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
271+
272+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
273+
274+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
275+
276+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
277+
278+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
279+
280+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
281+
282+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
283+
284+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
285+
286+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
287+
288+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
289+
290+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
291+
292+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
293+
294+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
295+
296+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
297+
298+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
299+
300+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
301+
302+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
303+
304+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
305+
306+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
307+
308+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
309+
310+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
311+
312+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
313+
314+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" U"},"finish_reason":null}]}
315+
316+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
317+
318+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" R"},"finish_reason":null}]}
319+
320+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
321+
322+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" L"},"finish_reason":null}]}
323+
324+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
325+
326+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
327+
328+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
329+
330+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
331+
332+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
333+
334+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
335+
336+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
337+
338+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
339+
340+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
341+
342+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
343+
344+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
345+
346+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
347+
348+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
349+
350+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
351+
352+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
353+
354+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
355+
356+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
357+
358+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
359+
360+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
361+
362+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" v"},"finish_reason":null}]}
363+
364+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
365+
366+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
367+
368+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
369+
370+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
371+
372+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
373+
374+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
375+
376+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
377+
378+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
379+
380+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
381+
382+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
383+
384+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
385+
386+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
387+
388+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
389+
390+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
391+
392+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
393+
394+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
395+
396+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
403+
404+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
405+
406+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" URL"},"finish_reason":null}]}
407+
408+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
409+
410+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" save"},"finish_reason":null}]}
411+
412+ data: {"id":"chatcmpl-8efc292f6882f3c242d54c7e","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":46,"completion_tokens":200,"total_tokens":422}}
235413
236414 data: [DONE]
237415
@@ -240,7 +418,7 @@ interactions:
240418 - text/event-stream
241419 status: 200 OK
242420 code: 200
243− duration: 873.598583ms
421+ duration: 747.881583ms
244422- id: 1
245423 request:
246424 proto: HTTP/1.1
@@ -248,7 +426,7 @@ interactions:
248426 proto_minor: 1
249427 content_length: 33707
250428 host: ""
251− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
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/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.\",\"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}"
252430 headers:
253431 Accept:
254432 - application/json
@@ -265,49 +443,47 @@ interactions:
265443 content_length: -1
266444 uncompressed: true
267445 body: |+
268− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
269−
270− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
271447
272− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
273449
274− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
275451
276− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
277453
278− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
279455
280− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
281457
282− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
283459
284− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
285461
286− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
287463
288− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
289465
290− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
291467
292− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
293469
294− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
295471
296− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
297473
298− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
299475
300− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
301477
302− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
303479
304− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
305481
306− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_3eceec4c44ad4007af956277","type":"function","index":0,"function":{"name":"download","arguments":""}}]},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_506e856f9cbd4a19a541d177","type":"function","index":0,"function":{"name":"download","arguments":""}}]},"finish_reason":null}]}
307483
308− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"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\"}"}}]},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"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\"}"}}]},"finish_reason":null}]}
309485
310− data: {"id":"chatcmpl-c85e11ddb3887f7f8f5d07a3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":8,"completion_tokens":64,"total_tokens":7816}}
486+ data: {"id":"chatcmpl-e952eac50d9161cbe8a2b906","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":712,"completion_tokens":63,"total_tokens":7815}}
311487
312488 data: [DONE]
313489
@@ -316,7 +492,7 @@ interactions:
316492 - text/event-stream
317493 status: 200 OK
318494 code: 200
319− duration: 7.807126583s
495+ duration: 5.040665625s
320496- id: 2
321497 request:
322498 proto: HTTP/1.1
@@ -362,15 +538,15 @@ interactions:
362538 - text/plain; charset=UTF-8
363539 status: 200 OK
364540 code: 200
365− duration: 530.746583ms
541+ duration: 1.5467765s
366542- id: 3
367543 request:
368544 proto: HTTP/1.1
369545 proto_major: 1
370546 proto_minor: 1
371− content_length: 34273
547+ content_length: 34270
372548 host: ""
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/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_3eceec4c44ad4007af956277\",\"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.\"},{\"content\":\"Successfully downloaded 2574 bytes to example.txt (Content-Type: text/plain; charset=UTF-8)\",\"tool_call_id\":\"call_3eceec4c44ad4007af956277\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
549+ 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_506e856f9cbd4a19a541d177\",\"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_506e856f9cbd4a19a541d177\",\"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.\",\"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}"
374550 headers:
375551 Accept:
376552 - application/json
@@ -387,27 +563,27 @@ interactions:
387563 content_length: -1
388564 uncompressed: true
389565 body: |+
390− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
566+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
391567
392− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
568+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
393569
394− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ed"},"finish_reason":null}]}
570+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ed"},"finish_reason":null}]}
395571
396− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
572+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
397573
398− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}]}
574+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}]}
399575
400− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" as"},"finish_reason":null}]}
576+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" as"},"finish_reason":null}]}
401577
402− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
578+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
403579
404− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
580+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
405581
406− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
582+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
407583
408− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
584+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
409585
410− data: {"id":"chatcmpl-24d0696bd856a585bd0a216d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":16,"completion_tokens":11,"total_tokens":7835}}
586+ data: {"id":"chatcmpl-6c6bd5c27eedacaa3068d302","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":80,"completion_tokens":11,"total_tokens":7835}}
411587
412588 data: [DONE]
413589
@@ -416,4 +592,4 @@ interactions:
416592 - text/event-stream
417593 status: 200 OK
418594 code: 200
419− duration: 2.083404s
595+ duration: 3.460239209s
internal/agent/testdata/TestCoderAgent/glm-5.1/fetch_tool.yaml+127−347
@@ -25,385 +25,165 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" They"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" want"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Fetch"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" check"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" check"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Check"},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" presence"},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" of"},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" John"},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
123123
124− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
125125
126− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
127127
128− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
129129
130− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
131131
132− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
133133
134− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
135135
136− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
137137
138− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
139139
140− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
141141
142− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
143143
144− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
145145
146− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
147147
148− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" presence"},"finish_reason":null}]}
149149
150− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" of"},"finish_reason":null}]}
151151
152− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" occurrence"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" John"},"finish_reason":null}]}
153153
154− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" of"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
155155
156− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" John"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
157157
158− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
159159
160− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
161161
162− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
163163
164− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
165165
166− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
167167
168− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
169169
170− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Check"},"finish_reason":null}]}
171171
172− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
173173
174− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".html"},"finish_reason":null}]}
175175
176− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
177177
178− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" occurrence"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" presence"},"finish_reason":null}]}
179179
180− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" of"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" of"},"finish_reason":null}]}
181181
182− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" John"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" John"},"finish_reason":null}]}
183183
184− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
185185
186− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
201−
202− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
203−
204− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
217−
218− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
219−
220− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"example"},"finish_reason":null}]}
221−
222− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
223−
224− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
225−
226− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
227−
228− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
229−
230− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
231−
232− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
233−
234− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"for"},"finish_reason":null}]}
249−
250− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
251−
252− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
253−
254− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
255−
256− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
257−
258− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
259−
260− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
261−
262− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
263−
264− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
265−
266− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
267−
268− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
269−
270− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"occ"},"finish_reason":null}]}
271−
272− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"urrence"},"finish_reason":null}]}
273−
274− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
275−
276− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
277−
278− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
279−
280− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
281−
282− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
283−
284− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
285−
286− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
287−
288− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
289−
290− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
291−
292− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
293−
294− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"of"},"finish_reason":null}]}
295−
296− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
297−
298− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
299−
300− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
301−
302− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
303−
304− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
305−
306− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
307−
308− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
309−
310− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
311−
312− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
313−
314− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
315−
316− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
317−
318− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
319−
320− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
321−
322− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
323−
324− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
325−
326− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
327−
328− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
329−
330− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
331−
332− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
333−
334− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
335−
336− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
337−
338− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Doe"},"finish_reason":null}]}
339−
340− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
341−
342− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
343−
344− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
345−
346− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
347−
348− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
349−
350− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
351−
352− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
353−
354− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
355−
356− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
357−
358− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
359−
360− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
361−
362− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
363−
364− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
365−
366− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
367−
368− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
369−
370− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
371−
372− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Make"},"finish_reason":null}]}
373−
374− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" sure"},"finish_reason":null}]}
375−
376− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
377−
378− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
379−
380− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
381−
382− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
383−
384− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
385−
386− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
387−
388− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
389−
390− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Check"},"finish_reason":null}]}
391−
392− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
393−
394− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".html"},"finish_reason":null}]}
395−
396− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
397−
398− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" occurrence"},"finish_reason":null}]}
399−
400− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" of"},"finish_reason":null}]}
401−
402− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" John"},"finish_reason":null}]}
403−
404− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
405−
406− data: {"id":"chatcmpl-0ea6904f89f7f9b1f8ab8eae","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":3,"completion_tokens":197,"total_tokens":424}}
186+ data: {"id":"chatcmpl-636aff44fb03055c1ea3d457","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":51,"completion_tokens":87,"total_tokens":314}}
407187
408188 data: [DONE]
409189
@@ -412,7 +192,7 @@ interactions:
412192 - text/event-stream
413193 status: 200 OK
414194 code: 200
415− duration: 697.596792ms
195+ duration: 801.333959ms
416196- id: 1
417197 request:
418198 proto: HTTP/1.1
@@ -420,7 +200,7 @@ interactions:
420200 proto_minor: 1
421201 content_length: 33725
422202 host: ""
423− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
203+ 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.\",\"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}"
424204 headers:
425205 Accept:
426206 - application/json
@@ -437,55 +217,55 @@ interactions:
437217 content_length: -1
438218 uncompressed: true
439219 body: |+
440− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
441221
442− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
443223
444− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
445225
446− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
447227
448− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
449229
450− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
451231
452− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
453233
454− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
455235
456− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
457237
458− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
459239
460− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
461241
462− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
463243
464− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" check"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" check"},"finish_reason":null}]}
465245
466− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
467247
468− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
469249
470− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
471251
472− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
473253
474− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
475255
476− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
477257
478− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
479259
480− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
481261
482− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
483263
484− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_41551da5f8b34a829028b15a","type":"function","index":0,"function":{"name":"fetch","arguments":""}}]},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_927ffc2399f74b52a10e8e52","type":"function","index":0,"function":{"name":"fetch","arguments":""}}]},"finish_reason":null}]}
485265
486− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"format\":\"text\",\"url\":\"https://example-files.online-convert.com/website/html/example.html\"}"}}]},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"format\":\"text\",\"url\":\"https://example-files.online-convert.com/website/html/example.html\"}"}}]},"finish_reason":null}]}
487267
488− data: {"id":"chatcmpl-534faf46f654c6079a08b938","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":15,"completion_tokens":50,"total_tokens":7809}}
268+ data: {"id":"chatcmpl-9c969d015d1eda469a97bacf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":719,"completion_tokens":50,"total_tokens":7809}}
489269
490270 data: [DONE]
491271
@@ -494,7 +274,7 @@ interactions:
494274 - text/event-stream
495275 status: 200 OK
496276 code: 200
497− duration: 11.049881958s
277+ duration: 3.823314875s
498278- id: 2
499279 request:
500280 proto: HTTP/1.1
@@ -565,7 +345,7 @@ interactions:
565345 - text/html; charset=UTF-8
566346 status: 200 OK
567347 code: 200
568− duration: 142.3385ms
348+ duration: 405.671708ms
569349- id: 3
570350 request:
571351 proto: HTTP/1.1
@@ -573,7 +353,7 @@ interactions:
573353 proto_minor: 1
574354 content_length: 34254
575355 host: ""
576− 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_41551da5f8b34a829028b15a\",\"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_41551da5f8b34a829028b15a\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
356+ 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_927ffc2399f74b52a10e8e52\",\"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_927ffc2399f74b52a10e8e52\",\"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.\",\"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}"
577357 headers:
578358 Accept:
579359 - application/json
@@ -590,37 +370,37 @@ interactions:
590370 content_length: -1
591371 uncompressed: true
592372 body: |+
593− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
373+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
594374
595− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"No"},"finish_reason":null}]}
375+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"No"},"finish_reason":null}]}
596376
597− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
377+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
598378
599− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
379+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
600380
601− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" fetched"},"finish_reason":null}]}
381+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" fetched"},"finish_reason":null}]}
602382
603− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
383+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
604384
605− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" does"},"finish_reason":null}]}
385+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" does"},"finish_reason":null}]}
606386
607− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" not"},"finish_reason":null}]}
387+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" not"},"finish_reason":null}]}
608388
609− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contain"},"finish_reason":null}]}
389+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contain"},"finish_reason":null}]}
610390
611− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
391+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
612392
613− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" word"},"finish_reason":null}]}
393+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" word"},"finish_reason":null}]}
614394
615− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
395+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
616396
617− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
397+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
618398
619− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
399+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
620400
621− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"'."},"finish_reason":null}]}
401+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"'."},"finish_reason":null}]}
622402
623− data: {"id":"chatcmpl-f7b2bf895d7376bcf8d5c93f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":8,"completion_tokens":16,"total_tokens":7832}}
403+ data: {"id":"chatcmpl-61f8fe8e1aafe4a79b9447ad","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":72,"completion_tokens":16,"total_tokens":7832}}
624404
625405 data: [DONE]
626406
@@ -629,4 +409,4 @@ interactions:
629409 - text/event-stream
630410 status: 200 OK
631411 code: 200
632− duration: 3.944484083s
412+ duration: 3.012608958s
internal/agent/testdata/TestCoderAgent/glm-5.1/glob_tool.yaml+122−118
@@ -25,195 +25,199 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Keep"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Possibly"},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" code"},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" snippet"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Keep"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Use"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Find"},"finish_reason":null}]}
123123
124− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
125125
126− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
127127
128− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
129129
130− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
131131
132− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
133133
134− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
135135
136− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" folder"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
137137
138− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
139139
140− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" craft"},"finish_reason":null}]}
141141
142− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
143143
144− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
145145
146− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
147147
148− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
149149
150− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
151151
152− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
153153
154− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
155155
156− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Use"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
157157
158− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
159159
160− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
161161
162− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
163163
164− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
165165
166− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
167167
168− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
169169
170− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
171171
172− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
173173
174− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" folder"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
175175
176− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
177177
178− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
179179
180− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
181181
182− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
183183
184− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" inc"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
185185
186− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" spaces"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
187187
188− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
189189
190− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
191191
192− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
193193
194− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
195195
196− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Use"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
197197
198− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
199199
200− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
201201
202− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" list"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
203203
204− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Using"},"finish_reason":null}]}
205205
206− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
207207
208− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
209209
210− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" locate"},"finish_reason":null}]}
211211
212− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" all"},"finish_reason":null}]}
213213
214− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" folder"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
215215
216− data: {"id":"chatcmpl-216e9f5505919a1c0a6ed41f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":3,"completion_tokens":102,"total_tokens":313}}
216+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
217+
218+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
219+
220+ data: {"id":"chatcmpl-b43fe00f1a52b3fecc7c0543","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":35,"completion_tokens":104,"total_tokens":315}}
217221
218222 data: [DONE]
219223
@@ -222,7 +226,7 @@ interactions:
222226 - text/event-stream
223227 status: 200 OK
224228 code: 200
225− duration: 373.542625ms
229+ duration: 716.833959ms
226230- id: 1
227231 request:
228232 proto: HTTP/1.1
@@ -230,7 +234,7 @@ interactions:
230234 proto_minor: 1
231235 content_length: 33643
232236 host: ""
233− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
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/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.\",\"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}"
234238 headers:
235239 Accept:
236240 - application/json
@@ -247,13 +251,13 @@ interactions:
247251 content_length: -1
248252 uncompressed: true
249253 body: |+
250− data: {"id":"chatcmpl-1b8831d95a34f7b678e905fe","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-1cc33483f7d1f9042df5c7b4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
251255
252− data: {"id":"chatcmpl-1b8831d95a34f7b678e905fe","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_d65b8d7f10554c6a9588cd2b","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-1cc33483f7d1f9042df5c7b4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_756ea36486934478a158ca94","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
253257
254− data: {"id":"chatcmpl-1b8831d95a34f7b678e905fe","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\",\"pattern\":\"*.go\"}"}}]},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-1cc33483f7d1f9042df5c7b4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\",\"pattern\":\"*.go\"}"}}]},"finish_reason":null}]}
255259
256− data: {"id":"chatcmpl-1b8831d95a34f7b678e905fe","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":62,"completion_tokens":33,"total_tokens":7775}}
260+ data: {"id":"chatcmpl-1cc33483f7d1f9042df5c7b4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":702,"completion_tokens":33,"total_tokens":7775}}
257261
258262 data: [DONE]
259263
@@ -262,7 +266,7 @@ interactions:
262266 - text/event-stream
263267 status: 200 OK
264268 code: 200
265− duration: 3.967455291s
269+ duration: 3.384375792s
266270- id: 2
267271 request:
268272 proto: HTTP/1.1
@@ -270,7 +274,7 @@ interactions:
270274 proto_minor: 1
271275 content_length: 33994
272276 host: ""
273− 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_d65b8d7f10554c6a9588cd2b\",\"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_d65b8d7f10554c6a9588cd2b\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
277+ 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_756ea36486934478a158ca94\",\"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_756ea36486934478a158ca94\",\"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.\",\"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}"
274278 headers:
275279 Accept:
276280 - application/json
@@ -287,33 +291,33 @@ interactions:
287291 content_length: -1
288292 uncompressed: true
289293 body: |+
290− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
291295
292− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
293297
294− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
295299
296− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
297301
298− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
299303
300− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
301305
302− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
303307
304− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
305309
306− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
307311
308− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
309313
310− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
311315
312− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
313317
314− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
315319
316− data: {"id":"chatcmpl-05b7adc9c33d36b17d9b59cf","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":53,"completion_tokens":14,"total_tokens":7811}}
320+ data: {"id":"chatcmpl-4ffc2a9c94e72823ed7950f6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":117,"completion_tokens":14,"total_tokens":7811}}
317321
318322 data: [DONE]
319323
@@ -322,4 +326,4 @@ interactions:
322326 - text/event-stream
323327 status: 200 OK
324328 code: 200
325− duration: 4.257971583s
329+ duration: 3.439591583s
internal/agent/testdata/TestCoderAgent/glm-5.1/grep_tool.yaml+516−144
@@ -2,6 +2,86 @@
22version: 2
33interactions:
44- id: 0
5+ request:
6+ proto: HTTP/1.1
7+ proto_major: 1
8+ proto_minor: 1
9+ content_length: 33641
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 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.\",\"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}"
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-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29+
30+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31+
32+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33+
34+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
35+
36+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
37+
38+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
39+
40+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
41+
42+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
43+
44+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
45+
46+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
47+
48+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
49+
50+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
51+
52+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
53+
54+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
55+
56+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
57+
58+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
59+
60+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
61+
62+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
63+
64+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
65+
66+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
67+
68+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
69+
70+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_b1755b0046e34decb4062a14","type":"function","index":0,"function":{"name":"grep","arguments":""}}]},"finish_reason":null}]}
71+
72+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"include\":\"*.go\",\"path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\",\"pattern\":\"package\"}"}}]},"finish_reason":null}]}
73+
74+ data: {"id":"chatcmpl-4970a03e5b3d574139d3ae30","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":703,"completion_tokens":59,"total_tokens":7802}}
75+
76+ data: [DONE]
77+
78+ headers:
79+ Content-Type:
80+ - text/event-stream
81+ status: 200 OK
82+ code: 200
83+ duration: 3.903471959s
84+- id: 1
585 request:
686 proto: HTTP/1.1
787 proto_major: 1
@@ -25,213 +105,509 @@ interactions:
25105 content_length: -1
26106 uncompressed: true
27107 body: |+
28− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29109
30− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
31111
32− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
33113
34− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
35115
36− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" generate"},"finish_reason":null}]}
37117
38− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
39119
40− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
41121
42− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
43123
44− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
45125
46− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
47127
48− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
49129
50− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
51131
52− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
53133
54− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
55135
56− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
57137
58− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
59139
60− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
61141
62− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
63143
64− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
65145
66− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
67147
68− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
69149
70− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
71151
72− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
73153
74− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
75155
76− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
77157
78− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
79159
80− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
81161
82− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
83163
84− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
85165
86− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
87167
88− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
89169
90− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
91171
92− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
93173
94− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
95175
96− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"G"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
97177
98− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"rep"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
99179
100− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
101181
102− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
103183
104− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
105185
106− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
107187
108− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
109189
110− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
111191
112− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
113193
114− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
115195
116− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
117197
118− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
119199
120− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
121201
122− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Possibly"},"finish_reason":null}]}
123203
124− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
125205
126− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
127207
128− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"G"},"finish_reason":null}]}
129209
130− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"rep"},"finish_reason":null}]}
131211
132− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
133213
134− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
135215
136− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"rep"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
137217
138− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
139219
140− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" “"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
141221
142− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
143223
144− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"”"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
145225
146− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
147227
148− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
149229
150− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
151231
152− data: {"id":"chatcmpl-cfdb60d941abe62528d7086f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":4,"completion_tokens":70,"total_tokens":282}}
232+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
153233
154− data: [DONE]
234+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
155235
156− headers:
157− Content-Type:
158− - text/event-stream
159− status: 200 OK
160− code: 200
161− duration: 672.711583ms
162−- id: 1
163− request:
164− proto: HTTP/1.1
165− proto_major: 1
166− proto_minor: 1
167− content_length: 33641
168− host: ""
169− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
170− headers:
171− Accept:
172− - application/json
173− Content-Type:
174− - application/json
175− User-Agent:
176− - Charm-Crush/devel (https://charm.land/crush)
177− url: https://hyper.charm.land/v1/chat/completions
178− method: POST
179− response:
180− proto: HTTP/2.0
181− proto_major: 2
182− proto_minor: 0
183− content_length: -1
184− uncompressed: true
185− body: |+
186− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
237+
238+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
239+
240+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
241+
242+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
243+
244+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"r"},"finish_reason":null}]}
245+
246+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"..."},"finish_reason":null}]}
247+
248+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
249+
250+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
251+
252+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
253+
254+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
255+
256+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"G"},"finish_reason":null}]}
257+
258+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"rep"},"finish_reason":null}]}
259+
260+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
261+
262+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
263+
264+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
265+
266+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
267+
268+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
269+
270+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
271+
272+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
273+
274+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
275+
276+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
277+
278+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
279+
280+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
281+
282+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Gre"},"finish_reason":null}]}
283+
284+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"p"},"finish_reason":null}]}
285+
286+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
287+
288+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
289+
290+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
291+
292+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
293+
294+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
295+
296+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
297+
298+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
299+
300+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
301+
302+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
303+
304+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
305+
306+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
307+
308+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
309+
310+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
311+
312+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
313+
314+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
315+
316+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
317+
318+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
187319
188− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
189321
190− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
191323
192− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
193325
194− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
195327
196− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
197329
198− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"including"},"finish_reason":null}]}
199331
200− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
201333
202− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
203335
204− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
205337
206− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
207339
208− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
209341
210− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Actually"},"finish_reason":null}]}
211343
212− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" single"},"finish_reason":null}]}
213345
214− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
215347
216− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
217349
218− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
219351
220− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
221353
222− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
223355
224− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
225357
226− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \"'"},"finish_reason":null}]}
227359
228− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
229361
230− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_7a072ff86f5b402f891b4816","type":"function","index":0,"function":{"name":"grep","arguments":""}}]},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'\""},"finish_reason":null}]}
231363
232− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"include\":\"*.go\",\"path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\",\"pattern\":\"package\"}"}}]},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
233365
234− data: {"id":"chatcmpl-8bcd6dd65920726f09a279d9","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":63,"completion_tokens":60,"total_tokens":7803}}
366+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
367+
368+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
369+
370+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
371+
372+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"including"},"finish_reason":null}]}
373+
374+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
375+
376+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
377+
378+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
379+
380+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
381+
382+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
383+
384+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
385+
386+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
387+
388+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
389+
390+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
391+
392+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
393+
394+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
395+
396+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" so"},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" far"},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
403+
404+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
405+
406+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
407+
408+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
409+
410+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" properly"},"finish_reason":null}]}
411+
412+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
413+
414+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
415+
416+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"G"},"finish_reason":null}]}
417+
418+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"rep"},"finish_reason":null}]}
419+
420+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
421+
422+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
423+
424+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
425+
426+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
427+
428+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
429+
430+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
431+
432+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
433+
434+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
435+
436+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
437+
438+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"for"},"finish_reason":null}]}
439+
440+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
441+
442+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
443+
444+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
445+
446+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
447+
448+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
449+
450+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
451+
452+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
453+
454+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
455+
456+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
457+
458+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
459+
460+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \"'"},"finish_reason":null}]}
461+
462+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
463+
464+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'\""},"finish_reason":null}]}
465+
466+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
467+
468+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
469+
470+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
471+
472+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
473+
474+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
475+
476+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
477+
478+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
479+
480+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
481+
482+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
483+
484+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
485+
486+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"in"},"finish_reason":null}]}
487+
488+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
489+
490+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
491+
492+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
493+
494+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
495+
496+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
497+
498+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
499+
500+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
501+
502+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
503+
504+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
505+
506+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
507+
508+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
509+
510+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Go"},"finish_reason":null}]}
511+
512+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
513+
514+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
515+
516+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
517+
518+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
519+
520+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
521+
522+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
523+
524+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
525+
526+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
527+
528+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
529+
530+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
531+
532+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
533+
534+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"source"},"finish_reason":null}]}
535+
536+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
537+
538+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
539+
540+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
541+
542+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
543+
544+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
545+
546+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
547+
548+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
549+
550+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
551+
552+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
553+
554+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
555+
556+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
557+
558+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"files"},"finish_reason":null}]}
559+
560+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
561+
562+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
563+
564+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
565+
566+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
567+
568+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
569+
570+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
571+
572+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
573+
574+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
575+
576+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
577+
578+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
579+
580+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
581+
582+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
583+
584+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
585+
586+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
587+
588+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
589+
590+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
591+
592+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"rep"},"finish_reason":null}]}
593+
594+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
595+
596+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
597+
598+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
599+
600+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"'"},"finish_reason":null}]}
601+
602+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
603+
604+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
605+
606+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" source"},"finish_reason":null}]}
607+
608+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
609+
610+ data: {"id":"chatcmpl-32354a7c3f233721ecf44ce4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":36,"completion_tokens":259,"total_tokens":471}}
235611
236612 data: [DONE]
237613
@@ -240,15 +616,15 @@ interactions:
240616 - text/event-stream
241617 status: 200 OK
242618 code: 200
243− duration: 10.304762834s
619+ duration: 598.054125ms
244620- id: 2
245621 request:
246622 proto: HTTP/1.1
247623 proto_major: 1
248624 proto_minor: 1
249− content_length: 34175
625+ content_length: 34174
250626 host: ""
251− 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_7a072ff86f5b402f891b4816\",\"function\":{\"arguments\":\"{\\\"include\\\":\\\"*.go\\\",\\\"path\\\":\\\"/tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\\",\\\"pattern\\\":\\\"package\\\"}\",\"name\":\"grep\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to use the grep tool 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_7a072ff86f5b402f891b4816\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
627+ 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_b1755b0046e34decb4062a14\",\"function\":{\"arguments\":\"{\\\"include\\\":\\\"*.go\\\",\\\"path\\\":\\\"/tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\\",\\\"pattern\\\":\\\"package\\\"}\",\"name\":\"grep\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to search for the word 'package' in Go files using the grep tool.\"},{\"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_b1755b0046e34decb4062a14\",\"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.\",\"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}"
252628 headers:
253629 Accept:
254630 - application/json
@@ -265,43 +641,39 @@ interactions:
265641 content_length: -1
266642 uncompressed: true
267643 body: |+
268− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
269−
270− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
271−
272− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
644+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
273645
274− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
646+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
275647
276− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" match"},"finish_reason":null}]}
648+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" match"},"finish_reason":null}]}
277649
278− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" found"},"finish_reason":null}]}
279651
280− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
652+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
281653
282− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
654+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
283655
284− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
656+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
285657
286− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
658+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
287659
288− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
660+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
289661
290− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
662+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
291663
292− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
664+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
293665
294− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
666+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}]}
295667
296− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
668+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
297669
298− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
670+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
299671
300− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
672+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
301673
302− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
674+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
303675
304− data: {"id":"chatcmpl-d48cfea83ba8972d9e323702","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":14,"completion_tokens":19,"total_tokens":7841}}
676+ data: {"id":"chatcmpl-86348a2dad25c70a3b77eb78","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":142,"completion_tokens":17,"total_tokens":7839}}
305677
306678 data: [DONE]
307679
@@ -310,4 +682,4 @@ interactions:
310682 - text/event-stream
311683 status: 200 OK
312684 code: 200
313− duration: 4.618855916s
685+ duration: 3.811594958s
internal/agent/testdata/TestCoderAgent/glm-5.1/ls_tool.yaml+378−122
@@ -2,6 +2,46 @@
22version: 2
33interactions:
44- id: 0
5+ request:
6+ proto: HTTP/1.1
7+ proto_major: 1
8+ proto_minor: 1
9+ content_length: 33635
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 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.\",\"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}"
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-466a263c29c6321b56fb438a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29+
30+ data: {"id":"chatcmpl-466a263c29c6321b56fb438a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_2586fc4bcfd24239bcef7ef0","type":"function","index":0,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
31+
32+ data: {"id":"chatcmpl-466a263c29c6321b56fb438a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\"}"}}]},"finish_reason":null}]}
33+
34+ data: {"id":"chatcmpl-466a263c29c6321b56fb438a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":700,"completion_tokens":26,"total_tokens":7766}}
35+
36+ data: [DONE]
37+
38+ headers:
39+ Content-Type:
40+ - text/event-stream
41+ status: 200 OK
42+ code: 200
43+ duration: 3.4175995s
44+- id: 1
545 request:
646 proto: HTTP/1.1
747 proto_major: 1
@@ -25,187 +65,399 @@ interactions:
2565 content_length: -1
2666 uncompressed: true
2767 body: |+
28− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2969
30− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
3171
32− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
3373
34− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
3575
36− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
3777
38− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
3979
40− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
4181
42− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" given"},"finish_reason":null}]}
4383
44− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
4585
46− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
4787
48− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
4989
50− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
5191
52− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
5393
54− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
5595
56− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
5797
58− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
5999
60− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
61101
62− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
63103
64− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
65105
66− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
67107
68− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
69109
70− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
71111
72− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
73113
74− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
75115
76− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
77117
78− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
79119
80− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
81121
82− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
83123
84− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
85125
86− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
87127
88− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
89129
90− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
91131
92− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
93133
94− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
95135
96− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
97137
98− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
99139
100− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
101141
102− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
103143
104− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
105145
106− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
107147
108− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
109149
110− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"col"},"finish_reason":null}]}
111151
112− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
113153
114− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
115155
116− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
117157
118− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Listing"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
119159
120− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
121161
122− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
123163
124− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
125165
126− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Listing"},"finish_reason":null}]}
127167
128− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
129169
130− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
131171
132− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" good"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
133173
134− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
135175
136− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
137177
138− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" single"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
139179
140− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
141181
142− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
143183
144− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
145185
146− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
147187
148− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
149189
150− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Listing"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
151191
152− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
153193
154− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
155195
156− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
157197
158− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
159199
160− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
161201
162− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
163203
164− data: {"id":"chatcmpl-c618e553da7ec0cc185486f0","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":1,"completion_tokens":76,"total_tokens":285}}
204+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Listing"},"finish_reason":null}]}
165205
166− data: [DONE]
206+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
167207
168− headers:
169− Content-Type:
170− - text/event-stream
171− status: 200 OK
172− code: 200
173− duration: 658.755125ms
174−- id: 1
175− request:
176− proto: HTTP/1.1
177− proto_major: 1
178− proto_minor: 1
179− content_length: 33635
180− host: ""
181− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
182− headers:
183− Accept:
184− - application/json
185− Content-Type:
186− - application/json
187− User-Agent:
188− - Charm-Crush/devel (https://charm.land/crush)
189− url: https://hyper.charm.land/v1/chat/completions
190− method: POST
191− response:
192− proto: HTTP/2.0
193− proto_major: 2
194− proto_minor: 0
195− content_length: -1
196− uncompressed: true
197− body: |+
198− data: {"id":"chatcmpl-41d32426ef4f53f94016f3d4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
209+
210+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
211+
212+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
213+
214+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
215+
216+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
217+
218+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
219+
220+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
221+
222+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
223+
224+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
225+
226+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Counting"},"finish_reason":null}]}
227+
228+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" letters"},"finish_reason":null}]}
229+
230+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" including"},"finish_reason":null}]}
231+
232+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" spaces"},"finish_reason":null}]}
233+
234+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
235+
236+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Listing"},"finish_reason":null}]}
237+
238+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
239+
240+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
241+
242+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
243+
244+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
245+
246+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
247+
248+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
249+
250+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
251+
252+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
253+
254+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
255+
256+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
257+
258+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
259+
260+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
261+
262+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
263+
264+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
265+
266+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
267+
268+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
199269
200− data: {"id":"chatcmpl-41d32426ef4f53f94016f3d4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Simple"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
201271
202− data: {"id":"chatcmpl-41d32426ef4f53f94016f3d4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
203273
204− data: {"id":"chatcmpl-41d32426ef4f53f94016f3d4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_9c1f574960b54f1b91601bd3","type":"function","index":0,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
205275
206− data: {"id":"chatcmpl-41d32426ef4f53f94016f3d4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\"}"}}]},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
207277
208− data: {"id":"chatcmpl-41d32426ef4f53f94016f3d4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":60,"completion_tokens":28,"total_tokens":7768}}
278+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
279+
280+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
281+
282+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
283+
284+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
285+
286+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
287+
288+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
289+
290+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
291+
292+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
293+
294+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
295+
296+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
297+
298+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
299+
300+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
301+
302+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
303+
304+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
305+
306+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
307+
308+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
309+
310+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
311+
312+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
313+
314+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
315+
316+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
317+
318+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
319+
320+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
321+
322+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
323+
324+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
325+
326+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
327+
328+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
329+
330+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
331+
332+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
333+
334+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
335+
336+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
337+
338+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
339+
340+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
341+
342+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
343+
344+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
345+
346+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
347+
348+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
349+
350+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
351+
352+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
353+
354+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
355+
356+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
357+
358+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
359+
360+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
361+
362+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
363+
364+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
365+
366+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
367+
368+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
369+
370+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
371+
372+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
373+
374+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
375+
376+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
377+
378+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
379+
380+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
381+
382+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
383+
384+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
385+
386+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
387+
388+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
389+
390+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
391+
392+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
393+
394+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
395+
396+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" char"},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
403+
404+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
405+
406+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
407+
408+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
409+
410+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
411+
412+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Looks"},"finish_reason":null}]}
413+
414+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" good"},"finish_reason":null}]}
415+
416+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
417+
418+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
419+
420+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
421+
422+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
423+
424+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
425+
426+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
427+
428+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
429+
430+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
431+
432+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
433+
434+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
435+
436+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
437+
438+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
439+
440+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
441+
442+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
443+
444+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Listing"},"finish_reason":null}]}
445+
446+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
447+
448+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
449+
450+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
451+
452+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
453+
454+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
455+
456+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
457+
458+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
459+
460+ data: {"id":"chatcmpl-2cf9b53fe2aad53110a68ce2","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":33,"completion_tokens":204,"total_tokens":413}}
209461
210462 data: [DONE]
211463
@@ -214,15 +466,15 @@ interactions:
214466 - text/event-stream
215467 status: 200 OK
216468 code: 200
217− duration: 5.249411208s
469+ duration: 756.2675ms
218470- id: 2
219471 request:
220472 proto: HTTP/1.1
221473 proto_major: 1
222474 proto_minor: 1
223− content_length: 34020
475+ content_length: 33983
224476 host: ""
225− 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_9c1f574960b54f1b91601bd3\",\"function\":{\"arguments\":\"{\\\"path\\\":\\\"/tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\\"}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Simple request\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"call_9c1f574960b54f1b91601bd3\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
477+ 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_2586fc4bcfd24239bcef7ef0\",\"function\":{\"arguments\":\"{\\\"path\\\":\\\"/tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\\"}\",\"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_2586fc4bcfd24239bcef7ef0\",\"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.\",\"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}"
226478 headers:
227479 Accept:
228480 - application/json
@@ -239,29 +491,33 @@ interactions:
239491 content_length: -1
240492 uncompressed: true
241493 body: |+
242− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
494+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
495+
496+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Two"},"finish_reason":null}]}
497+
498+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
243499
244− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
245501
246− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
502+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
247503
248− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
249505
250− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
506+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
251507
252− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
253509
254− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
510+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
255511
256− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
257513
258− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
259515
260− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
261517
262− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
518+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
263519
264− data: {"id":"chatcmpl-8b4fac5eeddbcf7f3237757a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":56,"completion_tokens":12,"total_tokens":7812}}
520+ data: {"id":"chatcmpl-b8514ff71d680adaf2f0e430","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":120,"completion_tokens":14,"total_tokens":7814}}
265521
266522 data: [DONE]
267523
@@ -270,4 +526,4 @@ interactions:
270526 - text/event-stream
271527 status: 200 OK
272528 code: 200
273− duration: 2.308737667s
529+ duration: 3.19619575s
internal/agent/testdata/TestCoderAgent/glm-5.1/multiedit_tool.yaml+570−424
@@ -2,6 +2,114 @@
22version: 2
33interactions:
44- id: 0
5+ request:
6+ proto: HTTP/1.1
7+ proto_major: 1
8+ proto_minor: 1
9+ content_length: 33721
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 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.\",\"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}"
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-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29+
30+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
31+
32+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
33+
34+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
35+
36+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
37+
38+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
39+
40+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
41+
42+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
43+
44+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
45+
46+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
47+
48+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" see"},"finish_reason":null}]}
49+
50+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
51+
52+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
53+
54+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contents"},"finish_reason":null}]}
55+
56+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
57+
58+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_b2789b48d2ec41da9f61a574","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
59+
60+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\"}"}}]},"finish_reason":null}]}
61+
62+ data: {"id":"chatcmpl-54dc2649ab88ccb894885824","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":725,"completion_tokens":45,"total_tokens":7810}}
63+
64+ data: [DONE]
65+
66+ headers:
67+ Content-Type:
68+ - text/event-stream
69+ status: 200 OK
70+ code: 200
71+ duration: 3.823122208s
72+- id: 1
73+ request:
74+ proto: HTTP/1.1
75+ proto_major: 1
76+ proto_minor: 1
77+ content_length: 34251
78+ host: ""
79+ 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_b2789b48d2ec41da9f61a574\",\"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_b2789b48d2ec41da9f61a574\",\"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.\",\"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}"
80+ headers:
81+ Accept:
82+ - application/json
83+ Content-Type:
84+ - application/json
85+ User-Agent:
86+ - Charm-Crush/devel (https://charm.land/crush)
87+ url: https://hyper.charm.land/v1/chat/completions
88+ method: POST
89+ response:
90+ proto: HTTP/2.0
91+ proto_major: 2
92+ proto_minor: 0
93+ content_length: -1
94+ uncompressed: true
95+ body: |+
96+ data: {"id":"chatcmpl-517acaae8a6b55fa3c6a5333","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
97+
98+ data: {"id":"chatcmpl-517acaae8a6b55fa3c6a5333","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_b3accc0a7eaa4756b961e075","type":"function","index":0,"function":{"name":"multiedit","arguments":""}}]},"finish_reason":null}]}
99+
100+ data: {"id":"chatcmpl-517acaae8a6b55fa3c6a5333","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"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\"}"}}]},"finish_reason":null}]}
101+
102+ data: {"id":"chatcmpl-517acaae8a6b55fa3c6a5333","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":108,"completion_tokens":76,"total_tokens":7928}}
103+
104+ data: [DONE]
105+
106+ headers:
107+ Content-Type:
108+ - text/event-stream
109+ status: 200 OK
110+ code: 200
111+ duration: 4.295830959s
112+- id: 2
5113 request:
6114 proto: HTTP/1.1
7115 proto_major: 1
@@ -25,751 +133,779 @@ interactions:
25133 content_length: -1
26134 uncompressed: true
27135 body: |+
28− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29137
30− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
31139
32− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
33141
34− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
35143
36− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
37145
38− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
39147
40− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
41149
42− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
43151
44− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
45153
46− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
47155
48− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
49157
50− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
51159
52− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
53161
54− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Language"},"finish_reason":null}]}
55163
56− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
57165
58− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
59167
60− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
61169
62− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
63171
64− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Using"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
65173
66− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mult"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
67175
68− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
69177
70− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
71179
72− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
73181
74− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
75183
76− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
77185
78− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
79187
80− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Change"},"finish_reason":null}]}
81189
82− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"!"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
83191
84− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
85193
86− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
87195
88− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
89197
90− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
91199
92− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"!"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
93201
94− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
95203
96− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
97205
98− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
99207
100− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
101209
102− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
103211
104− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
105213
106− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
107215
108− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Change"},"finish_reason":null}]}
109217
110− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
111219
112− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
113221
114− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
115223
116− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Could"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
117225
118− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
119227
120− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
121229
122− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
123231
124− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Mult"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
125233
126− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
127235
128− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
129237
130− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
131239
132− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
133241
134− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
135243
136− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
137245
138− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Change"},"finish_reason":null}]}
139247
140− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
141249
142− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
143251
144− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
145253
146− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
147255
148− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
149257
150− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
151259
152− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Mult"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
153261
154− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
155263
156− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
157265
158− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
159267
160− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
161269
162− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
163271
164− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
165273
166− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
167275
168− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
169277
170− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
171279
172− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
173281
174− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
175283
176− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
177285
178− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
179287
180− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
181289
182− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
183291
184− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Mult"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
185293
186− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
187295
188− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
189297
190− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\""},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
191299
192− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
193301
194− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
195303
196− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" inc"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
197305
198− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
199307
200− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?)"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
201309
202− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Actually"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
203311
204− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
205313
206− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Mult"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
207315
208− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
209317
210− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
211319
212− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\""},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
213321
214− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
215323
216− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
217325
218− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
219327
220− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
221329
222− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
223331
224− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"M"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
225333
226− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
227335
228− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
229337
230− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"...)."},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
231339
232− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Then"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
233341
234− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
235343
236− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
237345
238− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
239347
240− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
241349
242− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"!("},"finish_reason":null}]}
243351
244− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
245353
246− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
247355
248− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
249357
250− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"change"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
251359
252− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
253361
254− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
255363
256− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
257365
258− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
259367
260− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
261369
262− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
263371
264− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
265373
266− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
267375
268− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
269377
270− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
271379
272− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
273381
274− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
275383
276− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
277385
278− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"g"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
279387
280− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"reeting"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
281389
282− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
283391
284− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
285393
286− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
287395
288− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
289397
290− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
291399
292− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
293401
294− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
295403
296− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
297405
298− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
299407
300− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
301409
302− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
303411
304− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
305413
306− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
307415
308− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"and"},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
309417
310− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
311419
312− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
313421
314− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" exactly"},"finish_reason":null}]}
315423
316− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
317425
318− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
319427
320− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
321429
322− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Actually"},"finish_reason":null}]}
323431
324− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
325433
326− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
327435
328− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
329437
330− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" precisely"},"finish_reason":null}]}
331439
332− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
333441
334− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" including"},"finish_reason":null}]}
335443
336− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"add"},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" spaces"},"finish_reason":null}]}
337445
338− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
339447
340− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
341449
342− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
343451
344− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" string"},"finish_reason":null}]}
345453
346− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
347455
348− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
349457
350− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Change"},"finish_reason":null}]}
351459
352− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
353461
354− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
355463
356− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
357465
358− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
359467
360− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
361469
362− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
363471
364− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"comment"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
365473
366− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
367475
368− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
369477
370− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Write"},"finish_reason":null}]}
371479
372− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" out"},"finish_reason":null}]}
373481
374− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
375483
376− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
377485
378− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
379487
380− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
381489
382− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
490+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
383491
384− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
492+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
385493
386− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
494+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
387495
388− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
496+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
389497
390− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" limit"},"finish_reason":null}]}
498+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
391499
392− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
393501
394− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
502+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
395503
396− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"g"},"finish_reason":null}]}
397505
398− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
506+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
399507
400− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Rule"},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
401509
402− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
510+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
403511
404− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
405513
406− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
407515
408− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" letters"},"finish_reason":null}]}
409517
410− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
518+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
411519
412− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
413521
414− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
522+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
415523
416− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" It"},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":";"},"finish_reason":null}]}
417525
418− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" H"},"finish_reason":null}]}
419527
420− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
421529
422− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Do"},"finish_reason":null}]}
530+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
423531
424− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" not"},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
425533
426− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
427535
428− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
536+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
429537
430− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
538+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
431539
432− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
540+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
433541
434− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
542+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
435543
436− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\""},"finish_reason":null}]}
544+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
437545
438− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
546+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
439547
440− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" cannot"},"finish_reason":null}]}
548+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
441549
442− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":";"},"finish_reason":null}]}
443551
444− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
552+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" W"},"finish_reason":null}]}
445553
446− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
554+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
447555
448− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Remove"},"finish_reason":null}]}
556+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
449557
450− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
558+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
451559
452− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
560+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"r"},"finish_reason":null}]}
453561
454− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
562+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
455563
456− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
564+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
457565
458− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
566+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
459567
460− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Mult"},"finish_reason":null}]}
568+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"d"},"finish_reason":null}]}
461569
462− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
570+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
463571
464− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
572+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
465573
466− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
574+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
467575
468− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
576+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":";"},"finish_reason":null}]}
469577
470− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
578+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
471579
472− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
580+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
473581
474− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
582+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
475583
476− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
584+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
477585
478− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
479587
480− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
588+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
481589
482− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
590+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":";"},"finish_reason":null}]}
483591
484− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Mult"},"finish_reason":null}]}
592+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" H"},"finish_reason":null}]}
485593
486− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
594+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
487595
488− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
596+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
489597
490− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
491599
492− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
493601
494− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
495603
496− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
497605
498− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
499607
500− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
501609
502− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
503611
504− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
505613
506− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
507615
508− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":";"},"finish_reason":null}]}
509617
510− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
511619
512− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"change"},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
513621
514− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"r"},"finish_reason":null}]}
515623
516− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
517625
518− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"u"},"finish_reason":null}]}
519627
520− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
521629
522− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"s"},"finish_reason":null}]}
523631
524− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
632+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
525633
526− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
527635
528− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
636+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
529637
530− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
638+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
531639
532− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
533641
534− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
642+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":";"},"finish_reason":null}]}
535643
536− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
644+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
537645
538− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
646+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
539647
540− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"g"},"finish_reason":null}]}
648+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
541649
542− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"reeting"},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
543651
544− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
652+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"d"},"finish_reason":null}]}
545653
546− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
654+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
547655
548− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
656+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
549657
550− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
658+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
551659
552− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
660+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":";"},"finish_reason":null}]}
553661
554− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
662+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
555663
556− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
664+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
557665
558− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
666+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"d"},"finish_reason":null}]}
559667
560− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
668+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
561669
562− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
670+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"d"},"finish_reason":null}]}
563671
564− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
672+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
565673
566− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
674+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
567675
568− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
676+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
569677
570− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"and"},"finish_reason":null}]}
678+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":";"},"finish_reason":null}]}
571679
572− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
680+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
573681
574− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
682+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
575683
576− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
684+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
577685
578− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
686+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
579687
580− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
688+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
581689
582− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
690+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
583691
584− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
692+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
585693
586− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
694+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
587695
588− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
696+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
589697
590− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
698+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
591699
592− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
700+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
593701
594− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
702+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
595703
596− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
704+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
597705
598− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"add"},"finish_reason":null}]}
706+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
599707
600− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
708+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
601709
602− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
710+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
603711
604− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
712+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
605713
606− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
714+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
607715
608− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
716+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
609717
610− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
718+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
611719
612− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
720+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
613721
614− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
722+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
615723
616− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
724+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
617725
618− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
726+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
619727
620− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
728+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
621729
622− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
730+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" But"},"finish_reason":null}]}
623731
624− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
732+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
625733
626− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"comment"},"finish_reason":null}]}
734+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" better"},"finish_reason":null}]}
627735
628− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
736+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
629737
630− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
738+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
631739
632− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
740+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Replace"},"finish_reason":null}]}
633741
634− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
742+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
635743
636− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
744+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
637745
638− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
746+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
639747
640− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
748+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
641749
642− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
750+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
643751
644− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
752+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
645753
646− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
754+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
647755
648− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
756+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
649757
650− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
758+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
651759
652− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Mult"},"finish_reason":null}]}
760+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
653761
654− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"ied"},"finish_reason":null}]}
762+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Replace"},"finish_reason":null}]}
655763
656− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"it"},"finish_reason":null}]}
764+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
657765
658− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" change"},"finish_reason":null}]}
766+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
659767
660− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" greeting"},"finish_reason":null}]}
768+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
661769
662− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
770+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
663771
664− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" add"},"finish_reason":null}]}
772+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
665773
666− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
774+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
667775
668− data: {"id":"chatcmpl-5a839663827ce384987ebda4","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":7,"completion_tokens":328,"total_tokens":559}}
776+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
669777
670− data: [DONE]
778+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
671779
672− headers:
673− Content-Type:
674− - text/event-stream
675− status: 200 OK
676− code: 200
677− duration: 395.249792ms
678−- id: 1
679− request:
680− proto: HTTP/1.1
681− proto_major: 1
682− proto_minor: 1
683− content_length: 33721
684− host: ""
685− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
686− headers:
687− Accept:
688− - application/json
689− Content-Type:
690− - application/json
691− User-Agent:
692− - Charm-Crush/devel (https://charm.land/crush)
693− url: https://hyper.charm.land/v1/chat/completions
694− method: POST
695− response:
696− proto: HTTP/2.0
697− proto_major: 2
698− proto_minor: 0
699− content_length: -1
700− uncompressed: true
701− body: |+
702− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
780+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
703781
704− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
782+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
705783
706− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
784+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
707785
708− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
786+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
709787
710− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
788+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
711789
712− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
790+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
713791
714− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
792+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
715793
716− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
794+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
717795
718− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" see"},"finish_reason":null}]}
796+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
719797
720− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
798+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
721799
722− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
800+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
723801
724− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contents"},"finish_reason":null}]}
802+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
725803
726− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
804+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
727805
728− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_3fc8df8501a54bdb8a533d23","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
806+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
729807
730− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\"}"}}]},"finish_reason":null}]}
808+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
731809
732− data: {"id":"chatcmpl-d26fcae8158f8db937b68814","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":21,"completion_tokens":43,"total_tokens":7808}}
810+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
733811
734− data: [DONE]
812+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
735813
736− headers:
737− Content-Type:
738− - text/event-stream
739− status: 200 OK
740− code: 200
741− duration: 10.044032875s
742−- id: 2
743− request:
744− proto: HTTP/1.1
745− proto_major: 1
746− proto_minor: 1
747− content_length: 34243
748− host: ""
749− 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_3fc8df8501a54bdb8a533d23\",\"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</file>\\n\",\"tool_call_id\":\"call_3fc8df8501a54bdb8a533d23\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
750− headers:
751− Accept:
752− - application/json
753− Content-Type:
754− - application/json
755− User-Agent:
756− - Charm-Crush/devel (https://charm.land/crush)
757− url: https://hyper.charm.land/v1/chat/completions
758− method: POST
759− response:
760− proto: HTTP/2.0
761− proto_major: 2
762− proto_minor: 0
763− content_length: -1
764− uncompressed: true
765− body: |+
766− data: {"id":"chatcmpl-fe2d485c9056c0fc0c37fa57","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
814+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
815+
816+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
817+
818+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
819+
820+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
767821
768− data: {"id":"chatcmpl-fe2d485c9056c0fc0c37fa57","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_162949daf153494e86785c95","type":"function","index":0,"function":{"name":"multiedit","arguments":""}}]},"finish_reason":null}]}
822+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
769823
770− data: {"id":"chatcmpl-fe2d485c9056c0fc0c37fa57","object":"chat.completion.chunk","created":0,"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, Crush!\\\")\"}],\"file_path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\"}"}}]},"finish_reason":null}]}
824+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
771825
772− data: {"id":"chatcmpl-fe2d485c9056c0fc0c37fa57","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":44,"completion_tokens":95,"total_tokens":7947}}
826+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
827+
828+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
829+
830+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
831+
832+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
833+
834+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
835+
836+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
837+
838+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
839+
840+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
841+
842+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
843+
844+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
845+
846+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
847+
848+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
849+
850+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
851+
852+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
853+
854+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
855+
856+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
857+
858+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
859+
860+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
861+
862+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
863+
864+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
865+
866+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
867+
868+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
869+
870+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
871+
872+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
873+
874+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
875+
876+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
877+
878+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
879+
880+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
881+
882+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
883+
884+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
885+
886+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
887+
888+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
889+
890+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
891+
892+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Replace"},"finish_reason":null}]}
893+
894+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Hello"},"finish_reason":null}]}
895+
896+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" World"},"finish_reason":null}]}
897+
898+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
899+
900+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Hello"},"finish_reason":null}]}
901+
902+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Crush"},"finish_reason":null}]}
903+
904+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
905+
906+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
907+
908+ data: {"id":"chatcmpl-18ba696a53142f8fceb16d9d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":55,"completion_tokens":394,"total_tokens":625}}
773909
774910 data: [DONE]
775911
@@ -778,15 +914,15 @@ interactions:
778914 - text/event-stream
779915 status: 200 OK
780916 code: 200
781− duration: 5.825693125s
917+ duration: 706.161541ms
782918- id: 3
783919 request:
784920 proto: HTTP/1.1
785921 proto_major: 1
786922 proto_minor: 1
787− content_length: 34892
923+ content_length: 34828
788924 host: ""
789− 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_3fc8df8501a54bdb8a533d23\",\"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</file>\\n\",\"tool_call_id\":\"call_3fc8df8501a54bdb8a533d23\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_162949daf153494e86785c95\",\"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, Crush!\\\\\\\")\\\"}],\\\"file_path\\\":\\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_162949daf153494e86785c95\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
925+ 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_b2789b48d2ec41da9f61a574\",\"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_b2789b48d2ec41da9f61a574\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_b3accc0a7eaa4756b961e075\",\"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_b3accc0a7eaa4756b961e075\",\"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.\",\"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}"
790926 headers:
791927 Accept:
792928 - application/json
@@ -803,39 +939,49 @@ interactions:
803939 content_length: -1
804940 uncompressed: true
805941 body: |+
806− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
942+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
943+
944+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
945+
946+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
947+
948+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Changed"},"finish_reason":null}]}
949+
950+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
951+
952+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" greeting"},"finish_reason":null}]}
807953
808− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
954+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" string"},"finish_reason":null}]}
809955
810− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
956+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
811957
812− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Updated"},"finish_reason":null}]}
958+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" added"},"finish_reason":null}]}
813959
814− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
960+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
815961
816− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" greeting"},"finish_reason":null}]}
962+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
817963
818− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" string"},"finish_reason":null}]}
964+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"//"},"finish_reason":null}]}
819965
820− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
966+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" G"},"finish_reason":null}]}
821967
822− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" added"},"finish_reason":null}]}
968+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"reeting"},"finish_reason":null}]}
823969
824− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
970+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
825971
826− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
972+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
827973
828− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" above"},"finish_reason":null}]}
974+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" above"},"finish_reason":null}]}
829975
830− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
976+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
831977
832− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"fmt"},"finish_reason":null}]}
978+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"fmt"},"finish_reason":null}]}
833979
834− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".Println"},"finish_reason":null}]}
980+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".Println"},"finish_reason":null}]}
835981
836− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
982+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
837983
838− data: {"id":"chatcmpl-3326c09673a979871ae3aa86","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":114,"completion_tokens":17,"total_tokens":8003}}
984+ data: {"id":"chatcmpl-291b41722ec3e5d4a675d235","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":159,"completion_tokens":22,"total_tokens":7989}}
839985
840986 data: [DONE]
841987
@@ -844,4 +990,4 @@ interactions:
844990 - text/event-stream
845991 status: 200 OK
846992 code: 200
847− duration: 2.399328375s
993+ duration: 3.39534875s
internal/agent/testdata/TestCoderAgent/glm-5.1/parallel_tool_calls.yaml+371−219
@@ -25,357 +25,479 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" generate"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ≤"},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Keep"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Parallel"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Content"},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" listing"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
123123
124− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
125125
126− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
127127
128− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
129129
130− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
131131
132− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
133133
134− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
135135
136− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
137137
138− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
139139
140− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
141141
142− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" very"},"finish_reason":null}]}
143143
144− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" listing"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" important"},"finish_reason":null}]}
145145
146− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
147147
148− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" you"},"finish_reason":null}]}
149149
150− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
151151
152− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" both"},"finish_reason":null}]}
153153
154− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
155155
156− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" calls"},"finish_reason":null}]}
157157
158− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
159159
160− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
161161
162− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
163163
164− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
165165
166− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
167167
168− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
169169
170− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
171171
172− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
173173
174− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
175175
176− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
177177
178− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
179179
180− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
181181
182− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
183183
184− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
185185
186− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"glob"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
187187
188− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
189189
190− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
191191
192− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
193193
194− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
195195
196− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
197197
198− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
199199
200− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
201201
202− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
203203
204− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
205205
206− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
207207
208− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
209209
210− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"for"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
211211
212− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
213213
214− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
215215
216− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
217217
218− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
219219
220− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
221221
222− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
223223
224− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
225225
226− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
227227
228− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
229229
230− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \"."},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
231231
232− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" P"},"finish_reason":null}]}
233233
234− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
235235
236− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
237237
238− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
239239
240− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
241241
242− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
243243
244− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
245245
246− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
247247
248− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
249249
250− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
251251
252− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
253253
254− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"files"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
255255
256− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
257257
258− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
259259
260− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
261261
262− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
263263
264− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
265265
266− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
267267
268− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
269269
270− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
271271
272− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
273273
274− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
275275
276− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"and"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
277277
278− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
279279
280− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
281281
282− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
283283
284− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
285285
286− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
287287
288− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
289289
290− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
291291
292− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
293293
294− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
295295
296− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
297297
298− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"directory"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
299299
300− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
301301
302− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
303303
304− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
305305
306− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
307307
308− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
309309
310− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
311311
312− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
313313
314− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
315315
316− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
317317
318− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
319319
320− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"listing"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
321321
322− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
323323
324− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
325325
326− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
327327
328− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
329329
330− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
331331
332− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
333333
334− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
335335
336− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
337337
338− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
339339
340− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
341341
342− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
343343
344− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
345345
346− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
347347
348− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
349349
350− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
351351
352− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
353353
354− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
355355
356− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
357357
358− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
359359
360− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Parallel"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
361361
362− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
363363
364− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
365365
366− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
367367
368− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
369369
370− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
371371
372− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
373373
374− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
375375
376− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" listing"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
377377
378− data: {"id":"chatcmpl-b682e93c4db04e3e10b56efc","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":4,"completion_tokens":183,"total_tokens":411}}
378+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
379+
380+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
381+
382+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
383+
384+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
385+
386+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
387+
388+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
389+
390+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
391+
392+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
393+
394+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
395+
396+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
403+
404+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
405+
406+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
407+
408+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
409+
410+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
411+
412+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
413+
414+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
415+
416+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
417+
418+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
419+
420+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
421+
422+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
423+
424+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
425+
426+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
427+
428+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
429+
430+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
431+
432+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" y"},"finish_reason":null}]}
433+
434+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
435+
436+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
437+
438+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
439+
440+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
441+
442+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
443+
444+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
445+
446+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
447+
448+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
449+
450+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
451+
452+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
453+
454+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
455+
456+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
457+
458+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
459+
460+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
461+
462+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
463+
464+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"colon"},"finish_reason":null}]}
465+
466+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
467+
468+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That"},"finish_reason":null}]}
469+
470+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fits"},"finish_reason":null}]}
471+
472+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
473+
474+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
475+
476+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
477+
478+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
479+
480+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
481+
482+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Parallel"},"finish_reason":null}]}
483+
484+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
485+
486+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
487+
488+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
489+
490+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
491+
492+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
493+
494+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
495+
496+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
497+
498+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
499+
500+ data: {"id":"chatcmpl-fd45114ba4070538ac1dc9db","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":36,"completion_tokens":244,"total_tokens":472}}
379501
380502 data: [DONE]
381503
@@ -384,7 +506,7 @@ interactions:
384506 - text/event-stream
385507 status: 200 OK
386508 code: 200
387− duration: 788.312459ms
509+ duration: 534.428042ms
388510- id: 1
389511 request:
390512 proto: HTTP/1.1
@@ -392,7 +514,7 @@ interactions:
392514 proto_minor: 1
393515 content_length: 33732
394516 host: ""
395− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
517+ 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.\",\"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}"
396518 headers:
397519 Accept:
398520 - application/json
@@ -409,17 +531,43 @@ interactions:
409531 content_length: -1
410532 uncompressed: true
411533 body: |+
412− data: {"id":"chatcmpl-1ad3bedf586346b742acf111","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
535+
536+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
537+
538+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
539+
540+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
541+
542+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
543+
544+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
545+
546+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
413547
414− data: {"id":"chatcmpl-1ad3bedf586346b742acf111","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_1d40512641f0427abfe1c16a","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
548+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" both"},"finish_reason":null}]}
415549
416− data: {"id":"chatcmpl-1ad3bedf586346b742acf111","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\":\"**/*.go\"}"}}]},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
417551
418− data: {"id":"chatcmpl-1ad3bedf586346b742acf111","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_2283f0d4c8484e8fae126ee9","type":"function","index":1,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
552+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
419553
420− data: {"id":"chatcmpl-1ad3bedf586346b742acf111","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{}"}}]},"finish_reason":null}]}
554+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
421555
422− data: {"id":"chatcmpl-1ad3bedf586346b742acf111","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":16,"completion_tokens":16,"total_tokens":7776}}
556+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
557+
558+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
559+
560+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
561+
562+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_5f2279f0e7244e2d9fb544b2","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
563+
564+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\":\"**/*.go\"}"}}]},"finish_reason":null}]}
565+
566+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_c586cf0dd7ad4bf0a81467e1","type":"function","index":1,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
567+
568+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{}"}}]},"finish_reason":null}]}
569+
570+ data: {"id":"chatcmpl-76e19368c1ae2b71a859760b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":720,"completion_tokens":29,"total_tokens":7789}}
423571
424572 data: [DONE]
425573
@@ -428,15 +576,15 @@ interactions:
428576 - text/event-stream
429577 status: 200 OK
430578 code: 200
431− duration: 6.799006417s
579+ duration: 3.448828125s
432580- id: 2
433581 request:
434582 proto: HTTP/1.1
435583 proto_major: 1
436584 proto_minor: 1
437− content_length: 34299
585+ content_length: 34376
438586 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 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_1d40512641f0427abfe1c16a\",\"function\":{\"arguments\":\"{\\\"pattern\\\":\\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"},{\"id\":\"call_2283f0d4c8484e8fae126ee9\",\"function\":{\"arguments\":\"{}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/main.go\",\"tool_call_id\":\"call_1d40512641f0427abfe1c16a\",\"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_2283f0d4c8484e8fae126ee9\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
587+ 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_5f2279f0e7244e2d9fb544b2\",\"function\":{\"arguments\":\"{\\\"pattern\\\":\\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"},{\"id\":\"call_c586cf0dd7ad4bf0a81467e1\",\"function\":{\"arguments\":\"{}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to run both glob and ls in parallel.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/main.go\",\"tool_call_id\":\"call_5f2279f0e7244e2d9fb544b2\",\"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_c586cf0dd7ad4bf0a81467e1\",\"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.\",\"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}"
440588 headers:
441589 Accept:
442590 - application/json
@@ -453,67 +601,71 @@ interactions:
453601 content_length: -1
454602 uncompressed: true
455603 body: |+
456− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
605+
606+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
607+
608+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
457609
458− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"lob"},"finish_reason":null}]}
459611
460− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
461613
462− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"lob"},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**:"},"finish_reason":null}]}
463615
464− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Found"},"finish_reason":null}]}
465617
466− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**:"},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
467619
468− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
469621
470− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
471623
472− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
473625
474− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
475627
476− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
477629
478− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
479631
480− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" found"},"finish_reason":null}]}
632+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
481633
482− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
483635
484− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
636+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
485637
486− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
638+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n\n"},"finish_reason":null}]}
487639
488− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
489641
490− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n\n"},"finish_reason":null}]}
642+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Directory"},"finish_reason":null}]}
491643
492− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
644+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" listing"},"finish_reason":null}]}
493645
494− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Directory"},"finish_reason":null}]}
646+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**:"},"finish_reason":null}]}
495647
496− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" listing"},"finish_reason":null}]}
648+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Contains"},"finish_reason":null}]}
497649
498− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**:"},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
499651
500− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
652+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
501653
502− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
654+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
503655
504− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
656+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
505657
506− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`,"},"finish_reason":null}]}
658+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
507659
508− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
660+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
509661
510− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
662+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
511663
512− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
664+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
513665
514− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
666+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
515667
516− data: {"id":"chatcmpl-8e05ed9bad65b38f2bbb5ff6","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":24,"completion_tokens":31,"total_tokens":7863}}
668+ data: {"id":"chatcmpl-b5c07e7fd88fa7ed34fd187f","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":88,"completion_tokens":33,"total_tokens":7865}}
517669
518670 data: [DONE]
519671
@@ -522,4 +674,4 @@ interactions:
522674 - text/event-stream
523675 status: 200 OK
524676 code: 200
525− duration: 2.634782666s
677+ duration: 3.486510084s
internal/agent/testdata/TestCoderAgent/glm-5.1/read_a_file.yaml+159−87
@@ -25,95 +25,101 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mod"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mod"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Probably"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Reading"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" File"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Keep"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Viewing"},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Module"},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" File"},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Read"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" go"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Viewing"},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" File"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-98d249b7bf501e68c95ad23d","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":11,"completion_tokens":52,"total_tokens":255}}
116+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
117+
118+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" module"},"finish_reason":null}]}
119+
120+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
121+
122+ data: {"id":"chatcmpl-30ece0378efe0089c19682b8","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":27,"completion_tokens":55,"total_tokens":258}}
117123
118124 data: [DONE]
119125
@@ -122,7 +128,7 @@ interactions:
122128 - text/event-stream
123129 status: 200 OK
124130 code: 200
125− duration: 424.473125ms
131+ duration: 626.797666ms
126132- id: 1
127133 request:
128134 proto: HTTP/1.1
@@ -130,7 +136,7 @@ interactions:
130136 proto_minor: 1
131137 content_length: 33605
132138 host: ""
133− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
139+ 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.\",\"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}"
134140 headers:
135141 Accept:
136142 - application/json
@@ -147,43 +153,47 @@ interactions:
147153 content_length: -1
148154 uncompressed: true
149155 body: |+
150− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
151157
152− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
153159
154− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
155161
156− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
157163
158− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
159165
160− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
161167
162− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
163169
164− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
165171
166− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
167173
168− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
169175
170− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
171177
172− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
173179
174− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Let"},"finish_reason":null}]}
175181
176− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
177183
178− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
179185
180− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
181187
182− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_3e347af74bdd4b0dae2e851f","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
183189
184− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\"}"}}]},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
185191
186− data: {"id":"chatcmpl-e90396f8ffbdb35296103d22","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":54,"completion_tokens":44,"total_tokens":7778}}
192+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_369b0f9d79344c8f81cd6e25","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
193+
194+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\":\"**/go.mod\"}"}}]},"finish_reason":null}]}
195+
196+ data: {"id":"chatcmpl-9ebbe210b1528cc5f0518646","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":694,"completion_tokens":31,"total_tokens":7765}}
187197
188198 data: [DONE]
189199
@@ -192,15 +202,55 @@ interactions:
192202 - text/event-stream
193203 status: 200 OK
194204 code: 200
195− duration: 5.848403958s
205+ duration: 3.653444417s
196206- id: 2
197207 request:
198208 proto: HTTP/1.1
199209 proto_major: 1
200210 proto_minor: 1
201− content_length: 34064
211+ content_length: 33985
212+ host: ""
213+ 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_369b0f9d79344c8f81cd6e25\",\"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_369b0f9d79344c8f81cd6e25\",\"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.\",\"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}"
214+ headers:
215+ Accept:
216+ - application/json
217+ Content-Type:
218+ - application/json
219+ User-Agent:
220+ - Charm-Crush/devel (https://charm.land/crush)
221+ url: https://hyper.charm.land/v1/chat/completions
222+ method: POST
223+ response:
224+ proto: HTTP/2.0
225+ proto_major: 2
226+ proto_minor: 0
227+ content_length: -1
228+ uncompressed: true
229+ body: |+
230+ data: {"id":"chatcmpl-cdc4012dff77ab9c4d4cacc4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
231+
232+ data: {"id":"chatcmpl-cdc4012dff77ab9c4d4cacc4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_998b26c587834e75acb5f123","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
233+
234+ data: {"id":"chatcmpl-cdc4012dff77ab9c4d4cacc4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\"}"}}]},"finish_reason":null}]}
235+
236+ data: {"id":"chatcmpl-cdc4012dff77ab9c4d4cacc4","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":90,"completion_tokens":29,"total_tokens":7799}}
237+
238+ data: [DONE]
239+
240+ headers:
241+ Content-Type:
242+ - text/event-stream
243+ status: 200 OK
244+ code: 200
245+ duration: 3.295979958s
246+- id: 3
247+ request:
248+ proto: HTTP/1.1
249+ proto_major: 1
250+ proto_minor: 1
251+ content_length: 34377
202252 host: ""
203− 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_3e347af74bdd4b0dae2e851f\",\"function\":{\"arguments\":\"{\\\"file_path\\\":\\\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to read the go.mod file in the current directory.\"},{\"content\":\"<file>\\n 1|module example.com/testproject\\n 2|\\n 3|go 1.23\\n</file>\\n\",\"tool_call_id\":\"call_3e347af74bdd4b0dae2e851f\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
253+ 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_369b0f9d79344c8f81cd6e25\",\"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_369b0f9d79344c8f81cd6e25\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_998b26c587834e75acb5f123\",\"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_998b26c587834e75acb5f123\",\"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.\",\"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}"
204254 headers:
205255 Accept:
206256 - application/json
@@ -217,39 +267,61 @@ interactions:
217267 content_length: -1
218268 uncompressed: true
219269 body: |+
220− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
271+
272+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
273+
274+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
275+
276+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
277+
278+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
279+
280+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
281+
282+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" defines"},"finish_reason":null}]}
283+
284+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null}]}
285+
286+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
287+
288+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
289+
290+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Module"},"finish_reason":null}]}
291+
292+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**:"},"finish_reason":null}]}
221293
222− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Module"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
223295
224− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
225297
226− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
227299
228− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/test"},"finish_reason":null}]}
229301
230− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"project"},"finish_reason":null}]}
231303
232− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/test"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
233305
234− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"project"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
235307
236− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`,"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
237309
238− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Go"},"finish_reason":null}]}
239311
240− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" version"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" version"},"finish_reason":null}]}
241313
242− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**:"},"finish_reason":null}]}
243315
244− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
245317
246− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
247319
248− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
249321
250− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"23"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"23"},"finish_reason":null}]}
251323
252− data: {"id":"chatcmpl-7507ade6feb466a87a289dfb","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":117,"completion_tokens":17,"total_tokens":7814}}
324+ data: {"id":"chatcmpl-acf305c37f7aff09217e85da","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":89,"completion_tokens":28,"total_tokens":7861}}
253325
254326 data: [DONE]
255327
@@ -258,4 +330,4 @@ interactions:
258330 - text/event-stream
259331 status: 200 OK
260332 code: 200
261− duration: 2.068550917s
333+ duration: 3.603572084s
internal/agent/testdata/TestCoderAgent/glm-5.1/simple_test.yaml+98−110
@@ -25,151 +25,143 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" They"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" want"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" We"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summary"},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" of"},"finish_reason":null}]}
123123
124− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
125125
126− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
127127
128− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Or"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
129129
130− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
131131
132− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Simple"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
133133
134− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" something"},"finish_reason":null}]}
135135
136− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
137137
138− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Use"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
139139
140− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
141141
142− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
143143
144− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
145145
146− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" appropriate"},"finish_reason":null}]}
147147
148− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
149149
150− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Provide"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
151151
152− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
153153
154− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
155155
156− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
157157
158− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" I'll"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
159159
160− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
161161
162− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Greeting"},"finish_reason":null}]}
163163
164− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Greeting"},"finish_reason":null}]}
171−
172− data: {"id":"chatcmpl-9b6c8c4fb96fca89f847f69c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":8,"completion_tokens":80,"total_tokens":280}}
164+ data: {"id":"chatcmpl-a2f612ae965c35df07c936e7","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":152,"completion_tokens":76,"total_tokens":276}}
173165
174166 data: [DONE]
175167
@@ -178,7 +170,7 @@ interactions:
178170 - text/event-stream
179171 status: 200 OK
180172 code: 200
181− duration: 626.287542ms
173+ duration: 1.432785917s
182174- id: 1
183175 request:
184176 proto: HTTP/1.1
@@ -186,7 +178,7 @@ interactions:
186178 proto_minor: 1
187179 content_length: 33595
188180 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 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
181+ 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.\",\"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}"
190182 headers:
191183 Accept:
192184 - application/json
@@ -203,61 +195,57 @@ interactions:
203195 content_length: -1
204196 uncompressed: true
205197 body: |+
206− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
211199
212− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
213201
214− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" said"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
215203
216− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
217205
218− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" simply"},"finish_reason":null}]}
219207
220− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
221209
222− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" I"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
223211
224− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
225213
226− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" respond"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" I"},"finish_reason":null}]}
227215
228− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" briefly"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
229217
230− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" respond"},"finish_reason":null}]}
231219
232− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" conc"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" conc"},"finish_reason":null}]}
233221
234− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"is"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"is"},"finish_reason":null}]}
235223
236− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ely"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ely"},"finish_reason":null}]}
237225
238− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
239227
240− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
241229
242− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hi"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
243231
244− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
245233
246− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" How"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" How"},"finish_reason":null}]}
247235
248− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}]}
249237
250− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}]}
251239
252− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" help"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" help"},"finish_reason":null}]}
253241
254− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
255243
256− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" today"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" today"},"finish_reason":null}]}
257245
258− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}]}
259247
260− data: {"id":"chatcmpl-8f82f3a7d2915d3316317d11","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":50,"completion_tokens":27,"total_tokens":7757}}
248+ data: {"id":"chatcmpl-2d444759c1a25aa3a313fbd2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":7730,"completion_tokens":25,"total_tokens":7755}}
261249
262250 data: [DONE]
263251
@@ -266,4 +254,4 @@ interactions:
266254 - text/event-stream
267255 status: 200 OK
268256 code: 200
269− duration: 6.1273815s
257+ duration: 4.787780708s
internal/agent/testdata/TestCoderAgent/glm-5.1/sourcegraph_tool.yaml+594−830
@@ -6,9 +6,9 @@ interactions:
66 proto: HTTP/1.1
77 proto_major: 1
88 proto_minor: 1
9− content_length: 819
9+ content_length: 33655
1010 host: ""
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 sourcegraph to search for ''func main'' in Go repositories\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
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 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.\",\"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}"
1212 headers:
1313 Accept:
1414 - application/json
@@ -25,633 +25,405 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
35−
36− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
37−
38− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
39−
40− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
41−
42− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
43−
44− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
45−
46− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
47−
48− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
49−
50− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
51−
52− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
53−
54− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
55−
56− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
57−
58− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
59−
60− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
61−
62− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
63−
64− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
65−
66− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
67−
68− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
69−
70− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
71−
72− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
73−
74− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
75−
76− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
77−
78− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
79−
80− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
81−
82− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
83−
84− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
85−
86− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
87−
88− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
89−
90− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"max"},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
103−
104− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
107−
108− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
113−
114− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
115−
116− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
117−
118− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
119−
120− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
121−
122− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
123−
124− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
125−
126− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
127−
128− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
129−
130− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
131−
132− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
133−
134− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
135−
136− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
137−
138− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
139−
140− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
141−
142− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
143−
144− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
145−
146− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
147−
148− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
149−
150− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
151−
152− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
153−
154− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
155−
156− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
157−
158− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
159−
160− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
161−
162− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
163−
164− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
171−
172− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
201−
202− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
203−
204− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" including"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" spaces"},"finish_reason":null}]}
217−
218− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
219−
220− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
221−
222− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
223−
224− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
225−
226− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
227−
228− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"earch"},"finish_reason":null}]}
229−
230− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ing"},"finish_reason":null}]}
231−
232− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
233−
234− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
249−
250− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
251−
252− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
253−
254− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
255−
256− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
257−
258− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
259−
260− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
261−
262− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
263−
264− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
265−
266− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
267−
268− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
269−
270− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
271−
272− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
27329
274− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
27531
276− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
27733
278− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
27935
280− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
28137
282− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
28339
284− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
28541
286− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
28743
288− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
28945
290− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
29147
292− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
29349
294− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
29551
296− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
29753
298− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
29955
300− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
30157
302− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
30359
304− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
30561
306− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
30763
308− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
30965
310− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
31167
312− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_55e4aed5dc874cca8e0a17fb","type":"function","index":0,"function":{"name":"sourcegraph","arguments":""}}]},"finish_reason":null}]}
31369
314− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"query\":\"func main lang:go\"}"}}]},"finish_reason":null}]}
31571
316− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-1a03b5482191d75bd53c970b","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":703,"completion_tokens":35,"total_tokens":7778}}
31773
318− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
319−
320− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
321−
322− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
323−
324− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
325−
326− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
327−
328− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
329−
330− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
331−
332− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
74+ data: [DONE]
33375
334− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
76+ headers:
77+ Content-Type:
78+ - text/event-stream
79+ status: 200 OK
80+ code: 200
81+ duration: 3.972791416s
82+- id: 1
83+ request:
84+ proto: HTTP/1.1
85+ proto_major: 1
86+ proto_minor: 1
87+ content_length: 819
88+ host: ""
89+ 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 sourcegraph to search for ''func main'' in Go repositories\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
90+ headers:
91+ Accept:
92+ - application/json
93+ Content-Type:
94+ - application/json
95+ User-Agent:
96+ - Charm-Crush/devel (https://charm.land/crush)
97+ url: https://hyper.charm.land/v1/chat/completions
98+ method: POST
99+ response:
100+ proto: HTTP/2.0
101+ proto_major: 2
102+ proto_minor: 0
103+ content_length: -1
104+ uncompressed: true
105+ body: |+
106+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
335107
336− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
337109
338− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
339111
340− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
341113
342− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
343115
344− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
345117
346− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
347119
348− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
349121
350− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
351123
352− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
353125
354− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
355127
356− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
357129
358− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
359131
360− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
361133
362− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
363135
364− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
365137
366− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
367139
368− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
369141
370− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
371143
372− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
373145
374− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
375147
376− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
377149
378− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
379151
380− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
381153
382− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
383155
384− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
385157
386− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
387159
388− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ≤"},"finish_reason":null}]}
389161
390− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
391163
392− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
393165
394− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
395167
396− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
397169
398− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
399171
400− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
401173
402− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
403175
404− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
405177
406− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
407179
408− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
409181
410− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
411183
412− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Too"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
413185
414− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" long"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
415187
416− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
417189
418− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
419191
420− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
421193
422− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
423195
424− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
425197
426− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Re"},"finish_reason":null}]}
427199
428− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"pos"},"finish_reason":null}]}
429201
430− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Maybe"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
431203
432− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
433205
434− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Search"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
435207
436− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
437209
438− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
439211
440− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
441213
442− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
443215
444− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
445217
446− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" via"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
447219
448− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
449221
450− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
451223
452− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
453225
454− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
455227
456− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Re"},"finish_reason":null}]}
457229
458− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Search"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"pos"},"finish_reason":null}]}
459231
460− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
461233
462− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
463235
464− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
465237
466− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
467239
468− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
469241
470− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
471243
472− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
473245
474− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
475247
476− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
477249
478− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
479251
480− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
481253
482− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
483255
484− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Searching"},"finish_reason":null}]}
485257
486− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
487259
488− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
489261
490− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
491263
492− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
493265
494− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
495267
496− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
497269
498− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
499271
500− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
501273
502− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
503275
504− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
505277
506− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
507279
508− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
509281
510− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
511283
512− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
513285
514− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
515287
516− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Re"},"finish_reason":null}]}
517289
518− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"pos"},"finish_reason":null}]}
519291
520− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
521293
522− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
523295
524− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
525297
526− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
527299
528− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
529301
530− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
531303
532− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
533305
534− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
535307
536− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
537309
538− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
539311
540− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
541313
542− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
543315
544− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
545317
546− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
547319
548− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
549321
550− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
551323
552− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
553325
554− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
555327
556− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
557329
558− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
559331
560− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
561333
562− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
563335
564− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
565337
566− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" via"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
567339
568− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
569341
570− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
571343
572− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
573345
574− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
575347
576− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
577349
578− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
579351
580− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
581353
582− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
583355
584− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
585357
586− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
587359
588− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
589361
590− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
591363
592− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
593365
594− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
595367
596− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
597369
598− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
599371
600− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
601373
602− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
603375
604− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
605377
606− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ok"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
607379
608− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
609381
610− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
611383
612− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Total"},"finish_reason":null}]}
613385
614− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
615387
616− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" single"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
617389
618− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
619391
620− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
621393
622− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
623395
624− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
625397
626− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
627399
628− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Provide"},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
629401
630− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
631403
632− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
633405
634− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Searching"},"finish_reason":null}]}
635407
636− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Search"},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
637409
638− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" func"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Re"},"finish_reason":null}]}
639411
640− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"pos"},"finish_reason":null}]}
641413
642− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
643415
644− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" func"},"finish_reason":null}]}
645417
646− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
647419
648− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" via"},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
649421
650− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Source"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Source"},"finish_reason":null}]}
651423
652− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"graph"},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"graph"},"finish_reason":null}]}
653425
654− data: {"id":"chatcmpl-a79ccf0f2569b098b9e53a5f","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":4,"completion_tokens":321,"total_tokens":533}}
426+ data: {"id":"chatcmpl-56ce039883eb4a6456955034","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":36,"completion_tokens":168,"total_tokens":380}}
655427
656428 data: [DONE]
657429
@@ -660,85 +432,7 @@ interactions:
660432 - text/event-stream
661433 status: 200 OK
662434 code: 200
663− duration: 472.076292ms
664−- id: 1
665− request:
666− proto: HTTP/1.1
667− proto_major: 1
668− proto_minor: 1
669− content_length: 33655
670− host: ""
671− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
672− headers:
673− Accept:
674− - application/json
675− Content-Type:
676− - application/json
677− User-Agent:
678− - Charm-Crush/devel (https://charm.land/crush)
679− url: https://hyper.charm.land/v1/chat/completions
680− method: POST
681− response:
682− proto: HTTP/2.0
683− proto_major: 2
684− proto_minor: 0
685− content_length: -1
686− uncompressed: true
687− body: |+
688− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
689−
690− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
691−
692− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
693−
694− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
695−
696− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
697−
698− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
699−
700− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
701−
702− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
703−
704− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
705−
706− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
707−
708− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
709−
710− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
711−
712− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
713−
714− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
715−
716− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
717−
718− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
719−
720− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
721−
722− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
723−
724− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
725−
726− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
727−
728− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_cab40f2307014839bb51be75","type":"function","index":0,"function":{"name":"sourcegraph","arguments":""}}]},"finish_reason":null}]}
729−
730− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"count\":10,\"query\":\"func main lang:go\"}"}}]},"finish_reason":null}]}
731−
732− data: {"id":"chatcmpl-19ed4928016cf20e8b8f9035","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":63,"completion_tokens":41,"total_tokens":7784}}
733−
734− data: [DONE]
735−
736− headers:
737− Content-Type:
738− - text/event-stream
739− status: 200 OK
740− code: 200
741− duration: 9.831210208s
435+ duration: 600.888958ms
742436- id: 2
743437 request:
744438 proto: HTTP/1.1
@@ -760,21 +454,21 @@ interactions:
760454 proto_minor: 0
761455 content_length: -1
762456 uncompressed: true
763− 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/webtao520/golang_project"},"file":{"path":"golang项目实战架构/day03/panic_recover/main01.go","url":"/r/github.com/webtao520/golang_project/-/blob/golang%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98%E6%9E%B6%E6%9E%84/day03/panic_recover/main01.go","content":"package main \n\n\nimport (\n\t\"fmt\"\n)\n\nfunc funcA() {\n\tfmt.Println(\"func A\")\n}\n\nfunc funcB() {\n\tpanic(\"panic in B\")\n}\n\nfunc funcC() {\n\tfmt.Println(\"func C\")\n}\n\n// 程序运行期间funcB中引发了panic导致程序崩溃,异常退出了\nfunc main() {\n\tfuncA()\n\tfuncB()\n\tfuncC()\n}\n\n/**\nPS D:\\goLang\\github\\golang_project\\golang项目实战架构\\day03\\panic_recover\u003e go run .\\main01.go\nfunc A\npanic: panic in B\n\ngoroutine 1 [running]:\nmain.funcB(...)\n D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:13\nmain.main()\n D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:23 +0x9d\nexit status 2\n*/"},"lineMatches":[{"preview":"// 程序运行期间funcB中引发了panic导致程序崩溃,异常退出了","lineNumber":19,"offsetAndLengths":[[9,4]]},{"preview":"func main() {","lineNumber":20,"offsetAndLengths":[[0,9]]},{"preview":"\tfuncA()","lineNumber":21,"offsetAndLengths":[[1,4]]},{"preview":"\tfuncB()","lineNumber":22,"offsetAndLengths":[[1,4]]},{"preview":"\tfuncC()","lineNumber":23,"offsetAndLengths":[[1,4]]},{"preview":"main.funcB(...)","lineNumber":32,"offsetAndLengths":[[0,4],[5,4]]},{"preview":" D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:13","lineNumber":33,"offsetAndLengths":[[73,4]]},{"preview":"main.main()","lineNumber":34,"offsetAndLengths":[[0,4],[5,4]]},{"preview":" D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:23 +0x9d","lineNumber":35,"offsetAndLengths":[[73,4]]}]}]}}}}'
457+ 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/vitorbritto/dexter-momentum"},"file":{"path":"go/concepts/10-functions/stack-function/main.go","url":"/r/github.com/vitorbritto/dexter-momentum/-/blob/go/concepts/10-functions/stack-function/main.go","content":"package main\n\nimport \"runtime/debug\"\n\nfunc f3() {\n\tdebug.PrintStack()\n}\n\nfunc f2() {\n\tf3()\n}\n\nfunc f1() {\n\tf2()\n}\n\nfunc main() {\n\tf1()\n}\n\n// Output:\n// goroutine 1 [running]:\n// main.f3()\n// \t/Users/jason/go/src/stack-function/main.go:3 +0x11\n// main.f2()\n// \t/Users/jason/go/src/stack-function/main.go:7 +0x11\n// main.f1()\n// \t/Users/jason/go/src/stack-function/main.go:11 +0x11\n// main.main()\n// \t/Users/jason/go/src/stack-function/main.go:15 +0x11\n"},"lineMatches":[{"preview":"func main() {","lineNumber":16,"offsetAndLengths":[[0,9]]},{"preview":"// main.f3()","lineNumber":22,"offsetAndLengths":[[3,4]]},{"preview":"// \t/Users/jason/go/src/stack-function/main.go:3 +0x11","lineNumber":23,"offsetAndLengths":[[30,4],[39,4]]},{"preview":"// main.f2()","lineNumber":24,"offsetAndLengths":[[3,4]]},{"preview":"// \t/Users/jason/go/src/stack-function/main.go:7 +0x11","lineNumber":25,"offsetAndLengths":[[30,4],[39,4]]},{"preview":"// main.f1()","lineNumber":26,"offsetAndLengths":[[3,4]]},{"preview":"// \t/Users/jason/go/src/stack-function/main.go:11 +0x11","lineNumber":27,"offsetAndLengths":[[30,4],[39,4]]},{"preview":"// main.main()","lineNumber":28,"offsetAndLengths":[[3,4]]}]}]}}}}'
764458 headers:
765459 Content-Type:
766460 - application/json
767461 status: 200 OK
768462 code: 200
769− duration: 1.721604416s
463+ duration: 1.355889541s
770464- id: 3
771465 request:
772466 proto: HTTP/1.1
773467 proto_major: 1
774468 proto_minor: 1
775− content_length: 44209
469+ content_length: 43109
776470 host: ""
777− 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_cab40f2307014839bb51be75\",\"function\":{\"arguments\":\"{\\\"count\\\":10,\\\"query\\\":\\\"func main lang:go\\\"}\",\"name\":\"sourcegraph\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to search for 'func main' in Go repositories using the Sourcegraph tool.\"},{\"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/webtao520/golang_project/golang项目实战架构/day03/panic_recover/main01.go\\n\\nURL: /r/github.com/webtao520/golang_project/-/blob/golang%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%88%98%E6%9E%B6%E6%9E%84/day03/panic_recover/main01.go\\n\\n```\\n9| \\tfmt.Println(\\\"func A\\\")\\n10| }\\n11| \\n12| func funcB() {\\n13| \\tpanic(\\\"panic in B\\\")\\n14| }\\n15| \\n16| func funcC() {\\n17| \\tfmt.Println(\\\"func C\\\")\\n18| }\\n19| // 程序运行期间funcB中引发了panic导致程序崩溃,异常退出了\\n20| // 程序运行期间funcB中引发了panic导致程序崩溃,异常退出了\\n21| func main() {\\n22| \\tfuncA()\\n23| \\tfuncB()\\n24| \\tfuncC()\\n25| }\\n26| \\n27| /**\\n28| PS D:\\\\goLang\\\\github\\\\golang_project\\\\golang项目实战架构\\\\day03\\\\panic_recover> go run .\\\\main01.go\\n29| func A\\n```\\n\\n```\\n10| }\\n11| \\n12| func funcB() {\\n13| \\tpanic(\\\"panic in B\\\")\\n14| }\\n15| \\n16| func funcC() {\\n17| \\tfmt.Println(\\\"func C\\\")\\n18| }\\n19| \\n20| func main() {\\n21| func main() {\\n22| \\tfuncA()\\n23| \\tfuncB()\\n24| \\tfuncC()\\n25| }\\n26| \\n27| /**\\n28| PS D:\\\\goLang\\\\github\\\\golang_project\\\\golang项目实战架构\\\\day03\\\\panic_recover> go run .\\\\main01.go\\n29| func A\\n30| panic: panic in B\\n```\\n\\n```\\n11| \\n12| func funcB() {\\n13| \\tpanic(\\\"panic in B\\\")\\n14| }\\n15| \\n16| func funcC() {\\n17| \\tfmt.Println(\\\"func C\\\")\\n18| }\\n19| \\n20| // 程序运行期间funcB中引发了panic导致程序崩溃,异常退出了\\n21| \\tfuncA()\\n22| \\tfuncA()\\n23| \\tfuncB()\\n24| \\tfuncC()\\n25| }\\n26| \\n27| /**\\n28| PS D:\\\\goLang\\\\github\\\\golang_project\\\\golang项目实战架构\\\\day03\\\\panic_recover> go run .\\\\main01.go\\n29| func A\\n30| panic: panic in B\\n31| \\n```\\n\\n```\\n12| func funcB() {\\n13| \\tpanic(\\\"panic in B\\\")\\n14| }\\n15| \\n16| func funcC() {\\n17| \\tfmt.Println(\\\"func C\\\")\\n18| }\\n19| \\n20| // 程序运行期间funcB中引发了panic导致程序崩溃,异常退出了\\n21| func main() {\\n22| \\tfuncB()\\n23| \\tfuncB()\\n24| \\tfuncC()\\n25| }\\n26| \\n27| /**\\n28| PS D:\\\\goLang\\\\github\\\\golang_project\\\\golang项目实战架构\\\\day03\\\\panic_recover> go run .\\\\main01.go\\n29| func A\\n30| panic: panic in B\\n31| \\n32| goroutine 1 [running]:\\n```\\n\\n```\\n13| \\tpanic(\\\"panic in B\\\")\\n14| }\\n15| \\n16| func funcC() {\\n17| \\tfmt.Println(\\\"func C\\\")\\n18| }\\n19| \\n20| // 程序运行期间funcB中引发了panic导致程序崩溃,异常退出了\\n21| func main() {\\n22| \\tfuncA()\\n23| \\tfuncC()\\n24| \\tfuncC()\\n25| }\\n26| \\n27| /**\\n28| PS D:\\\\goLang\\\\github\\\\golang_project\\\\golang项目实战架构\\\\day03\\\\panic_recover> go run .\\\\main01.go\\n29| func A\\n30| panic: panic in B\\n31| \\n32| goroutine 1 [running]:\\n33| main.funcB(...)\\n```\\n\\n```\\n22| \\tfuncA()\\n23| \\tfuncB()\\n24| \\tfuncC()\\n25| }\\n26| \\n27| /**\\n28| PS D:\\\\goLang\\\\github\\\\golang_project\\\\golang项目实战架构\\\\day03\\\\panic_recover> go run .\\\\main01.go\\n29| func A\\n30| panic: panic in B\\n31| \\n32| main.funcB(...)\\n33| main.funcB(...)\\n34| D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:13\\n35| main.main()\\n36| D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:23 +0x9d\\n37| exit status 2\\n38| */\\n```\\n\\n```\\n23| \\tfuncB()\\n24| \\tfuncC()\\n25| }\\n26| \\n27| /**\\n28| PS D:\\\\goLang\\\\github\\\\golang_project\\\\golang项目实战架构\\\\day03\\\\panic_recover> go run .\\\\main01.go\\n29| func A\\n30| panic: panic in B\\n31| \\n32| goroutine 1 [running]:\\n33| D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:13\\n34| D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:13\\n35| main.main()\\n36| D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:23 +0x9d\\n37| exit status 2\\n38| */\\n```\\n\\n```\\n24| \\tfuncC()\\n25| }\\n26| \\n27| /**\\n28| PS D:\\\\goLang\\\\github\\\\golang_project\\\\golang项目实战架构\\\\day03\\\\panic_recover> go run .\\\\main01.go\\n29| func A\\n30| panic: panic in B\\n31| \\n32| goroutine 1 [running]:\\n33| main.funcB(...)\\n34| main.main()\\n35| main.main()\\n36| D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:23 +0x9d\\n37| exit status 2\\n38| */\\n```\\n\\n```\\n25| }\\n26| \\n27| /**\\n28| PS D:\\\\goLang\\\\github\\\\golang_project\\\\golang项目实战架构\\\\day03\\\\panic_recover> go run .\\\\main01.go\\n29| func A\\n30| panic: panic in B\\n31| \\n32| goroutine 1 [running]:\\n33| main.funcB(...)\\n34| D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:13\\n35| D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:23 +0x9d\\n36| D:/goLang/github/golang_project/golang项目实战架构/day03/panic_recover/main01.go:23 +0x9d\\n37| exit status 2\\n38| */\\n```\\n\\n\",\"tool_call_id\":\"call_cab40f2307014839bb51be75\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
471+ 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_55e4aed5dc874cca8e0a17fb\",\"function\":{\"arguments\":\"{\\\"query\\\":\\\"func main lang:go\\\"}\",\"name\":\"sourcegraph\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to search for 'func main' in Go repositories using the Sourcegraph tool.\"},{\"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/vitorbritto/dexter-momentum/go/concepts/10-functions/stack-function/main.go\\n\\nURL: /r/github.com/vitorbritto/dexter-momentum/-/blob/go/concepts/10-functions/stack-function/main.go\\n\\n```\\n6| \\tdebug.PrintStack()\\n7| }\\n8| \\n9| func f2() {\\n10| \\tf3()\\n11| }\\n12| \\n13| func f1() {\\n14| \\tf2()\\n15| }\\n16| func main() {\\n17| func main() {\\n18| \\tf1()\\n19| }\\n20| \\n21| // Output:\\n22| // goroutine 1 [running]:\\n23| // main.f3()\\n24| // \\t/Users/jason/go/src/stack-function/main.go:3 +0x11\\n25| // main.f2()\\n26| // \\t/Users/jason/go/src/stack-function/main.go:7 +0x11\\n```\\n\\n```\\n12| \\n13| func f1() {\\n14| \\tf2()\\n15| }\\n16| \\n17| func main() {\\n18| \\tf1()\\n19| }\\n20| \\n21| // Output:\\n22| // main.f3()\\n23| // main.f3()\\n24| // \\t/Users/jason/go/src/stack-function/main.go:3 +0x11\\n25| // main.f2()\\n26| // \\t/Users/jason/go/src/stack-function/main.go:7 +0x11\\n27| // main.f1()\\n28| // \\t/Users/jason/go/src/stack-function/main.go:11 +0x11\\n29| // main.main()\\n30| // \\t/Users/jason/go/src/stack-function/main.go:15 +0x11\\n31| \\n```\\n\\n```\\n13| func f1() {\\n14| \\tf2()\\n15| }\\n16| \\n17| func main() {\\n18| \\tf1()\\n19| }\\n20| \\n21| // Output:\\n22| // goroutine 1 [running]:\\n23| // \\t/Users/jason/go/src/stack-function/main.go:3 +0x11\\n24| // \\t/Users/jason/go/src/stack-function/main.go:3 +0x11\\n25| // main.f2()\\n26| // \\t/Users/jason/go/src/stack-function/main.go:7 +0x11\\n27| // main.f1()\\n28| // \\t/Users/jason/go/src/stack-function/main.go:11 +0x11\\n29| // main.main()\\n30| // \\t/Users/jason/go/src/stack-function/main.go:15 +0x11\\n31| \\n```\\n\\n```\\n14| \\tf2()\\n15| }\\n16| \\n17| func main() {\\n18| \\tf1()\\n19| }\\n20| \\n21| // Output:\\n22| // goroutine 1 [running]:\\n23| // main.f3()\\n24| // main.f2()\\n25| // main.f2()\\n26| // \\t/Users/jason/go/src/stack-function/main.go:7 +0x11\\n27| // main.f1()\\n28| // \\t/Users/jason/go/src/stack-function/main.go:11 +0x11\\n29| // main.main()\\n30| // \\t/Users/jason/go/src/stack-function/main.go:15 +0x11\\n31| \\n```\\n\\n```\\n15| }\\n16| \\n17| func main() {\\n18| \\tf1()\\n19| }\\n20| \\n21| // Output:\\n22| // goroutine 1 [running]:\\n23| // main.f3()\\n24| // \\t/Users/jason/go/src/stack-function/main.go:3 +0x11\\n25| // \\t/Users/jason/go/src/stack-function/main.go:7 +0x11\\n26| // \\t/Users/jason/go/src/stack-function/main.go:7 +0x11\\n27| // main.f1()\\n28| // \\t/Users/jason/go/src/stack-function/main.go:11 +0x11\\n29| // main.main()\\n30| // \\t/Users/jason/go/src/stack-function/main.go:15 +0x11\\n31| \\n```\\n\\n```\\n16| \\n17| func main() {\\n18| \\tf1()\\n19| }\\n20| \\n21| // Output:\\n22| // goroutine 1 [running]:\\n23| // main.f3()\\n24| // \\t/Users/jason/go/src/stack-function/main.go:3 +0x11\\n25| // main.f2()\\n26| // main.f1()\\n27| // main.f1()\\n28| // \\t/Users/jason/go/src/stack-function/main.go:11 +0x11\\n29| // main.main()\\n30| // \\t/Users/jason/go/src/stack-function/main.go:15 +0x11\\n31| \\n```\\n\\n```\\n17| func main() {\\n18| \\tf1()\\n19| }\\n20| \\n21| // Output:\\n22| // goroutine 1 [running]:\\n23| // main.f3()\\n24| // \\t/Users/jason/go/src/stack-function/main.go:3 +0x11\\n25| // main.f2()\\n26| // \\t/Users/jason/go/src/stack-function/main.go:7 +0x11\\n27| // \\t/Users/jason/go/src/stack-function/main.go:11 +0x11\\n28| // \\t/Users/jason/go/src/stack-function/main.go:11 +0x11\\n29| // main.main()\\n30| // \\t/Users/jason/go/src/stack-function/main.go:15 +0x11\\n31| \\n```\\n\\n```\\n18| \\tf1()\\n19| }\\n20| \\n21| // Output:\\n22| // goroutine 1 [running]:\\n23| // main.f3()\\n24| // \\t/Users/jason/go/src/stack-function/main.go:3 +0x11\\n25| // main.f2()\\n26| // \\t/Users/jason/go/src/stack-function/main.go:7 +0x11\\n27| // main.f1()\\n28| // main.main()\\n29| // main.main()\\n30| // \\t/Users/jason/go/src/stack-function/main.go:15 +0x11\\n31| \\n```\\n\\n\",\"tool_call_id\":\"call_55e4aed5dc874cca8e0a17fb\",\"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.\",\"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}"
778472 headers:
779473 Accept:
780474 - application/json
@@ -791,607 +485,677 @@ interactions:
791485 content_length: -1
792486 uncompressed: true
793487 body: |+
794− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
489+
490+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
491+
492+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
493+
494+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
495+
496+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"+"},"finish_reason":null}]}
497+
498+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" matches"},"finish_reason":null}]}
499+
500+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
501+
502+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
503+
504+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
505+
506+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
507+
508+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
509+
510+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
511+
512+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
513+
514+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repositories"},"finish_reason":null}]}
515+
516+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
517+
518+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Here"},"finish_reason":null}]}
519+
520+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"'s"},"finish_reason":null}]}
521+
522+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
523+
524+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" summary"},"finish_reason":null}]}
525+
526+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" of"},"finish_reason":null}]}
527+
528+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
529+
530+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" top"},"finish_reason":null}]}
531+
532+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
533+
534+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null}]}
535+
536+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
537+
538+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" #"},"finish_reason":null}]}
539+
540+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
541+
542+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Repository"},"finish_reason":null}]}
543+
544+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
545+
546+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" File"},"finish_reason":null}]}
547+
548+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
549+
550+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Sn"},"finish_reason":null}]}
551+
552+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ippet"},"finish_reason":null}]}
553+
554+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
555+
556+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
557+
558+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"---"},"finish_reason":null}]}
795559
796− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
560+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
797561
798− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
562+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-----------"},"finish_reason":null}]}
799563
800− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
564+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
801565
802− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"+"},"finish_reason":null}]}
566+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"------"},"finish_reason":null}]}
803567
804− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" matches"},"finish_reason":null}]}
568+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
805569
806− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
570+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"---------"},"finish_reason":null}]}
807571
808− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
572+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|\n"},"finish_reason":null}]}
809573
810− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
574+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
811575
812− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
576+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
813577
814− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
578+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
815579
816− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
580+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
817581
818− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
582+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
819583
820− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
584+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
821585
822− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
823587
824− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Here"},"finish_reason":null}]}
588+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
825589
826− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" are"},"finish_reason":null}]}
590+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
827591
828− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" some"},"finish_reason":null}]}
592+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
829593
830− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" highlights"},"finish_reason":null}]}
594+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
831595
832− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null}]}
596+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
833597
834− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
835599
836− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" #"},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
837601
838− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
839603
840− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Repository"},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
841605
842− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14"},"finish_reason":null}]}
843607
844− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" File"},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_functions"},"finish_reason":null}]}
845609
846− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
847611
848− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Description"},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
849613
850− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
851615
852− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
853617
854− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"---"},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
855619
856− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"01"},"finish_reason":null}]}
857621
858− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-----------"},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_before"},"finish_reason":null}]}
859623
860− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-f"},"finish_reason":null}]}
861625
862− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"------"},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"unc"},"finish_reason":null}]}
863627
864− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
865629
866− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-------------"},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
867631
868− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|\n"},"finish_reason":null}]}
632+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
869633
870− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
871635
872− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
636+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
873637
874− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
638+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Basic"},"finish_reason":null}]}
875639
876− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" greeting"},"finish_reason":null}]}
877641
878− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
642+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
879643
880− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
644+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" called"},"finish_reason":null}]}
881645
882− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
646+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
883647
884− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
648+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
885649
886− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
887651
888− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
652+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
889653
890− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
654+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"()`"},"finish_reason":null}]}
891655
892− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
656+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
893657
894− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
658+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
895659
896− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
660+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
897661
898− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
662+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
899663
900− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
664+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
901665
902− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
666+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
903667
904− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
668+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
905669
906− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
670+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
907671
908− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
672+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
909673
910− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
674+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
911675
912− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
676+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
913677
914− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"01"},"finish_reason":null}]}
678+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
915679
916− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_before"},"finish_reason":null}]}
680+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
917681
918− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-f"},"finish_reason":null}]}
682+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
919683
920− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"unc"},"finish_reason":null}]}
684+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
921685
922− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
686+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
923687
924− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
688+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
925689
926− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
690+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14"},"finish_reason":null}]}
927691
928− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
692+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_functions"},"finish_reason":null}]}
929693
930− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
694+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
931695
932− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Simple"},"finish_reason":null}]}
696+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
933697
934− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" greeting"},"finish_reason":null}]}
698+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
935699
936− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
700+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
937701
938− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" called"},"finish_reason":null}]}
702+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
939703
940− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
704+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"02"},"finish_reason":null}]}
941705
942− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
706+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
943707
944− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
708+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
945709
946− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
710+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
947711
948− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
712+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
949713
950− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
714+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
951715
952− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
716+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
953717
954− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
718+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Function"},"finish_reason":null}]}
955719
956− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
720+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" expression"},"finish_reason":null}]}
957721
958− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
722+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" assigned"},"finish_reason":null}]}
959723
960− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
724+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
961725
962− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
726+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" variable"},"finish_reason":null}]}
963727
964− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
728+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
965729
966− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
730+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
967731
968− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
732+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
969733
970− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
734+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
971735
972− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
736+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"()`"},"finish_reason":null}]}
973737
974− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
738+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
975739
976− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
740+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
977741
978− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
742+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
979743
980− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
744+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"3"},"finish_reason":null}]}
981745
982− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
746+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
983747
984− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
748+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
985749
986− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
750+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
987751
988− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
752+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
989753
990− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"02"},"finish_reason":null}]}
754+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
991755
992− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
756+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
993757
994− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
758+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
995759
996− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
760+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
997761
998− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
762+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
999763
1000− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
764+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
1001765
1002− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
766+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1003767
1004− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Function"},"finish_reason":null}]}
768+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1005769
1006− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" expression"},"finish_reason":null}]}
770+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1007771
1008− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" assigned"},"finish_reason":null}]}
772+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14"},"finish_reason":null}]}
1009773
1010− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
774+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_functions"},"finish_reason":null}]}
1011775
1012− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" variable"},"finish_reason":null}]}
776+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1013777
1014− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
778+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
1015779
1016− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
780+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
1017781
1018− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
782+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
1019783
1020− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"3"},"finish_reason":null}]}
784+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1021785
1022− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
786+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03"},"finish_reason":null}]}
1023787
1024− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
788+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
1025789
1026− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
790+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
1027791
1028− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
792+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_sh"},"finish_reason":null}]}
1029793
1030− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
794+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ows"},"finish_reason":null}]}
1031795
1032− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
796+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-type"},"finish_reason":null}]}
1033797
1034− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
798+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
1035799
1036− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
800+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1037801
1038− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
802+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1039803
1040− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
804+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1041805
1042− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
806+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Function"},"finish_reason":null}]}
1043807
1044− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
808+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" expression"},"finish_reason":null}]}
1045809
1046− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
810+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
1047811
1048− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
812+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" type"},"finish_reason":null}]}
1049813
1050− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
814+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" printing"},"finish_reason":null}]}
1051815
1052− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
816+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
1053817
1054− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
818+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1055819
1056− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
820+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
1057821
1058− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
822+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
1059823
1060− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03"},"finish_reason":null}]}
824+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"()`"},"finish_reason":null}]}
1061825
1062− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
826+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
1063827
1064− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
828+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1065829
1066− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_sh"},"finish_reason":null}]}
830+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1067831
1068− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ows"},"finish_reason":null}]}
832+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"4"},"finish_reason":null}]}
1069833
1070− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-type"},"finish_reason":null}]}
834+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1071835
1072− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
836+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1073837
1074− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
838+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
1075839
1076− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
840+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
1077841
1078− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
842+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
1079843
1080− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Function"},"finish_reason":null}]}
844+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
1081845
1082− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" expression"},"finish_reason":null}]}
846+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
1083847
1084− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
848+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1085849
1086− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" type"},"finish_reason":null}]}
850+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1087851
1088− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" printing"},"finish_reason":null}]}
852+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
1089853
1090− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
854+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1091855
1092− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
856+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1093857
1094− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
858+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1095859
1096− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"4"},"finish_reason":null}]}
860+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14"},"finish_reason":null}]}
1097861
1098− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
862+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_functions"},"finish_reason":null}]}
1099863
1100− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
864+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1101865
1102− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
866+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
1103867
1104− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
868+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
1105869
1106− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
870+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
1107871
1108− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
872+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1109873
1110− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
874+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"04"},"finish_reason":null}]}
1111875
1112− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
876+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_an"},"finish_reason":null}]}
1113877
1114− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
878+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"other"},"finish_reason":null}]}
1115879
1116− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
880+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-way"},"finish_reason":null}]}
1117881
1118− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
882+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
1119883
1120− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
884+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
1121885
1122− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
886+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
1123887
1124− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
888+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1125889
1126− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
890+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1127891
1128− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
892+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1129893
1130− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
894+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1131895
1132− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
896+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"make"},"finish_reason":null}]}
1133897
1134− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
898+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Gre"},"finish_reason":null}]}
1135899
1136− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"04"},"finish_reason":null}]}
900+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"eter"},"finish_reason":null}]}
1137901
1138− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_an"},"finish_reason":null}]}
902+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"()`"},"finish_reason":null}]}
1139903
1140− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"other"},"finish_reason":null}]}
904+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" returning"},"finish_reason":null}]}
1141905
1142− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-way"},"finish_reason":null}]}
906+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
1143907
1144− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
908+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" closure"},"finish_reason":null}]}
1145909
1146− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
910+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1147911
1148− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
912+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" called"},"finish_reason":null}]}
1149913
1150− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
914+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
1151915
1152− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
916+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1153917
1154− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
918+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
1155919
1156− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Function"},"finish_reason":null}]}
920+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
1157921
1158− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" returning"},"finish_reason":null}]}
922+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"()`"},"finish_reason":null}]}
1159923
1160− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
924+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
1161925
1162− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" closure"},"finish_reason":null}]}
926+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1163927
1164− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
928+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1165929
1166− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
930+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"5"},"finish_reason":null}]}
1167931
1168− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
932+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1169933
1170− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"5"},"finish_reason":null}]}
934+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1171935
1172− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
936+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
1173937
1174− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
938+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
1175939
1176− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
940+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
1177941
1178− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
942+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
1179943
1180− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
944+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
1181945
1182− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
946+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1183947
1184− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
948+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1185949
1186− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
950+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
1187951
1188− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
952+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1189953
1190− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
954+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1191955
1192− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
956+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1193957
1194− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
958+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14"},"finish_reason":null}]}
1195959
1196− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
960+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_functions"},"finish_reason":null}]}
1197961
1198− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
962+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1199963
1200− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
964+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
1201965
1202− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
966+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
1203967
1204− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
968+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
1205969
1206− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
970+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1207971
1208− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
972+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"05"},"finish_reason":null}]}
1209973
1210− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"05"},"finish_reason":null}]}
974+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_an"},"finish_reason":null}]}
1211975
1212− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_an"},"finish_reason":null}]}
976+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"other"},"finish_reason":null}]}
1213977
1214− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"other"},"finish_reason":null}]}
978+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-way"},"finish_reason":null}]}
1215979
1216− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-way"},"finish_reason":null}]}
980+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
1217981
1218− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_func"},"finish_reason":null}]}
982+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
1219983
1220− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-expression"},"finish_reason":null}]}
984+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_sh"},"finish_reason":null}]}
1221985
1222− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_sh"},"finish_reason":null}]}
986+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ows"},"finish_reason":null}]}
1223987
1224− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ows"},"finish_reason":null}]}
988+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-type"},"finish_reason":null}]}
1225989
1226− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-type"},"finish_reason":null}]}
990+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
1227991
1228− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
992+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1229993
1230− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
994+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1231995
1232− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
996+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1233997
1234− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
998+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Same"},"finish_reason":null}]}
1235999
1236− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Closure"},"finish_reason":null}]}
1000+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" pattern"},"finish_reason":null}]}
12371001
1238− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
1002+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
12391003
1240− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" type"},"finish_reason":null}]}
1004+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" type"},"finish_reason":null}]}
12411005
1242− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" inspection"},"finish_reason":null}]}
1006+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" inspection"},"finish_reason":null}]}
12431007
1244− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
1008+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
12451009
1246− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1010+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
12471011
1248− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1012+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
12491013
1250− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
1014+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
12511015
1252− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1016+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
12531017
1254− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1018+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
12551019
1256− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"web"},"finish_reason":null}]}
1020+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"v"},"finish_reason":null}]}
12571021
1258− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ta"},"finish_reason":null}]}
1022+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"itor"},"finish_reason":null}]}
12591023
1260− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"o"},"finish_reason":null}]}
1024+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"brit"},"finish_reason":null}]}
12611025
1262− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"520"},"finish_reason":null}]}
1026+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"to"},"finish_reason":null}]}
12631027
1264− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/g"},"finish_reason":null}]}
1028+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/d"},"finish_reason":null}]}
12651029
1266− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1030+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"exter"},"finish_reason":null}]}
12671031
1268− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_project"},"finish_reason":null}]}
1032+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-m"},"finish_reason":null}]}
12691033
1270− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1034+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"omentum"},"finish_reason":null}]}
12711035
1272− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1036+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
12731037
1274− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1038+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
12751039
1276− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
1040+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
12771041
1278− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1042+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
12791043
1280− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"panic"},"finish_reason":null}]}
1044+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/con"},"finish_reason":null}]}
12811045
1282− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"_re"},"finish_reason":null}]}
1046+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"cepts"},"finish_reason":null}]}
12831047
1284− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"cover"},"finish_reason":null}]}
1048+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
12851049
1286− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
1050+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"10"},"finish_reason":null}]}
12871051
1288− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"01"},"finish_reason":null}]}
1052+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-functions"},"finish_reason":null}]}
12891053
1290− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1054+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
12911055
1292− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1056+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"stack"},"finish_reason":null}]}
12931057
1294− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1058+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-function"},"finish_reason":null}]}
12951059
1296− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Panic"},"finish_reason":null}]}
1060+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
12971061
1298− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/re"},"finish_reason":null}]}
1062+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
12991063
1300− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"cover"},"finish_reason":null}]}
1064+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
13011065
1302− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" demonstration"},"finish_reason":null}]}
1066+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
13031067
1304− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n\n"},"finish_reason":null}]}
1068+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Call"},"finish_reason":null}]}
13051069
1306− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
1070+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" stack"},"finish_reason":null}]}
13071071
1308− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
1072+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" demonstration"},"finish_reason":null}]}
13091073
1310− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" are"},"finish_reason":null}]}
1074+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
13111075
1312− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" predominantly"},"finish_reason":null}]}
1076+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
13131077
1314− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
1078+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"debug"},"finish_reason":null}]}
13151079
1316− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
1080+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".Print"},"finish_reason":null}]}
13171081
1318− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" training"},"finish_reason":null}]}
1082+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Stack"},"finish_reason":null}]}
13191083
1320− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/tutorial"},"finish_reason":null}]}
1084+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"()`"},"finish_reason":null}]}
13211085
1322− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repositories"},"finish_reason":null}]}
1086+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n\n"},"finish_reason":null}]}
13231087
1324− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
1088+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Most"},"finish_reason":null}]}
13251089
1326− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" To"},"finish_reason":null}]}
1090+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
13271091
1328− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" narrow"},"finish_reason":null}]}
1092+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" are"},"finish_reason":null}]}
13291093
1330− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
1094+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
13311095
1332− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
1096+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
13331097
1334− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" specific"},"finish_reason":null}]}
1098+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" training"},"finish_reason":null}]}
13351099
1336− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" projects"},"finish_reason":null}]}
1100+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/tutorial"},"finish_reason":null}]}
13371101
1338− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1102+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
13391103
1340− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
1104+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
13411105
1342− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" could"},"finish_reason":null}]}
1106+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" You"},"finish_reason":null}]}
13431107
1344− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" refine"},"finish_reason":null}]}
1108+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}]}
13451109
1346− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
1110+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" narrow"},"finish_reason":null}]}
13471111
1348− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" query"},"finish_reason":null}]}
1112+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
13491113
1350− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1114+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" search"},"finish_reason":null}]}
13511115
1352− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" e"},"finish_reason":null}]}
1116+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
13531117
1354− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".g"},"finish_reason":null}]}
1118+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" more"},"finish_reason":null}]}
13551119
1356− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
1120+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" specific"},"finish_reason":null}]}
13571121
1358− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1122+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" queries"},"finish_reason":null}]}
13591123
1360− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
1124+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}]}
13611125
1362− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
1126+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
13631127
1364− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" lang"},"finish_reason":null}]}
1128+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
13651129
1366− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
1130+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
13671131
1368− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
1132+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" lang"},"finish_reason":null}]}
13691133
1370− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repo"},"finish_reason":null}]}
1134+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
13711135
1372− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
1136+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
13731137
1374− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"github"},"finish_reason":null}]}
1138+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repo"},"finish_reason":null}]}
13751139
1376− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
1140+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
13771141
1378− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/s"},"finish_reason":null}]}
1142+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"specific"},"finish_reason":null}]}
13791143
1380− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ome"},"finish_reason":null}]}
1144+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-org"},"finish_reason":null}]}
13811145
1382− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"org"},"finish_reason":null}]}
1146+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
13831147
1384− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/s"},"finish_reason":null}]}
1148+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
13851149
1386− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"om"},"finish_reason":null}]}
1150+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" target"},"finish_reason":null}]}
13871151
1388− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ere"},"finish_reason":null}]}
1152+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" particular"},"finish_reason":null}]}
13891153
1390− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"po"},"finish_reason":null}]}
1154+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repositories"},"finish_reason":null}]}
13911155
1392− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
1156+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
13931157
1394− data: {"id":"chatcmpl-699e2ea6142ffea5485300c3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":3290,"completion_tokens":301,"total_tokens":11335}}
1158+ data: {"id":"chatcmpl-4ac950d7e5e9da5a749757be","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":3117,"completion_tokens":336,"total_tokens":11133}}
13951159
13961160 data: [DONE]
13971161
@@ -1400,4 +1164,4 @@ interactions:
14001164 - text/event-stream
14011165 status: 200 OK
14021166 code: 200
1403− duration: 3.703162291s
1167+ duration: 5.000312125s
internal/agent/testdata/TestCoderAgent/glm-5.1/update_a_file.yaml+550−266
@@ -2,6 +2,108 @@
22version: 2
33interactions:
44- id: 0
5+ request:
6+ proto: HTTP/1.1
7+ proto_major: 1
8+ proto_minor: 1
9+ content_length: 33661
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 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.\",\"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}"
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-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29+
30+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
31+
32+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
33+
34+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
35+
36+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
37+
38+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
39+
40+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
41+
42+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
43+
44+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
45+
46+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
47+
48+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
49+
50+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
51+
52+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_2ff8198a89ba48769725fd11","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
53+
54+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\":\"**/main.go\"}"}}]},"finish_reason":null}]}
55+
56+ data: {"id":"chatcmpl-82e13d9ff948d6ae1d864e96","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":704,"completion_tokens":25,"total_tokens":7769}}
57+
58+ data: [DONE]
59+
60+ headers:
61+ Content-Type:
62+ - text/event-stream
63+ status: 200 OK
64+ code: 200
65+ duration: 3.548065875s
66+- id: 1
67+ request:
68+ proto: HTTP/1.1
69+ proto_major: 1
70+ proto_minor: 1
71+ content_length: 34027
72+ host: ""
73+ 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_2ff8198a89ba48769725fd11\",\"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_2ff8198a89ba48769725fd11\",\"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.\",\"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}"
74+ headers:
75+ Accept:
76+ - application/json
77+ Content-Type:
78+ - application/json
79+ User-Agent:
80+ - Charm-Crush/devel (https://charm.land/crush)
81+ url: https://hyper.charm.land/v1/chat/completions
82+ method: POST
83+ response:
84+ proto: HTTP/2.0
85+ proto_major: 2
86+ proto_minor: 0
87+ content_length: -1
88+ uncompressed: true
89+ body: |+
90+ data: {"id":"chatcmpl-1d523ed3c3963df51fbe016d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
91+
92+ data: {"id":"chatcmpl-1d523ed3c3963df51fbe016d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_f59e4cd2d4504618ac2b1ce0","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
93+
94+ data: {"id":"chatcmpl-1d523ed3c3963df51fbe016d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\"}"}}]},"finish_reason":null}]}
95+
96+ data: {"id":"chatcmpl-1d523ed3c3963df51fbe016d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":100,"completion_tokens":29,"total_tokens":7809}}
97+
98+ data: [DONE]
99+
100+ headers:
101+ Content-Type:
102+ - text/event-stream
103+ status: 200 OK
104+ code: 200
105+ duration: 3.264337375s
106+- id: 2
5107 request:
6108 proto: HTTP/1.1
7109 proto_major: 1
@@ -25,427 +127,605 @@ interactions:
25127 content_length: -1
26128 uncompressed: true
27129 body: |+
28− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29131
30− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
31133
32− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
33135
34− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
35137
36− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" generate"},"finish_reason":null}]}
37139
38− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
39141
40− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
41143
42− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" based"},"finish_reason":null}]}
43145
44− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" on"},"finish_reason":null}]}
45147
46− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" given"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
47149
48− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
49151
50− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
51153
52− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
53155
54− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
55157
56− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
57159
58− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
59161
60− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
61163
62− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
63165
64− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
65167
66− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
67169
68− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
69171
70− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
71173
72− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ≤"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
73175
74− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
75177
76− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\""},"finish_reason":null}]}
77179
78− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" then"},"finish_reason":null}]}
79181
80− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
81183
82− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
83185
84− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
85187
86− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
87189
88− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
89191
90− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"update"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
91193
92− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
93195
94− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"update"},"finish_reason":null}]}
95197
96− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
97199
98− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
99201
100− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
101203
102− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
103205
104− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" by"},"finish_reason":null}]}
105207
106− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" changing"},"finish_reason":null}]}
107209
108− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
109211
110− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
111213
112− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
113215
114− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" say"},"finish_reason":null}]}
115217
116− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
117219
118− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
119221
120− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
121223
122− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
123225
124− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
125227
126− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
127229
128− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
129231
130− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summary"},"finish_reason":null}]}
131233
132− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
133235
134− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
135237
136− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
137239
138− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
139241
140− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
141243
142− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
143245
144− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
145247
146− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
147249
148− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
149251
150− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
151253
152− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
153255
154− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
155257
156− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
157259
158− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
159261
160− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
161263
162− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
163265
164− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
165267
166− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Update"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
167269
168− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
169271
170− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
171273
172− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
173275
174− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
175277
176− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
177279
178− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
179281
180− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Update"},"finish_reason":null}]}
181283
182− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
183285
184− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
185287
186− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
187289
188− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
189291
190− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
191293
192− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
193295
194− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
195297
196− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
197299
198− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
199301
200− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
201303
202− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
203305
204− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
205307
206− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
207309
208− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
209311
210− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
211313
212− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
213315
214− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
215317
216− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
217319
218− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
219321
220− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
221323
222− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
223325
224− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
225327
226− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
227329
228− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\""},"finish_reason":null}]}
229331
230− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
231333
232− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
233335
234− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
235337
236− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
237339
238− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
239341
240− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Update"},"finish_reason":null}]}
241343
242− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
243345
244− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
245347
246− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
247349
248− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
249351
250− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
251353
252− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
253355
254− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
255357
256− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
257359
258− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
259361
260− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
261363
262− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
263365
264− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
265367
266− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
267369
268− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
269371
270− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
271373
272− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" -\u003e"},"finish_reason":null}]}
273375
274− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
275377
276− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
277379
278− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
279381
280− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
281383
282− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
283385
284− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
285387
286− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
287389
288− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
289391
290− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
291393
292− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
293395
294− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
295397
296− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
297399
298− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
299401
300− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
301403
302− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
303405
304− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
305407
306− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
307409
308− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
309411
310− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
311413
312− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
313415
314− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" OK"},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
315417
316− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
317419
318− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
319421
320− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
321423
322− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
323425
324− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" only"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
325427
326− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
327429
328− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
329431
330− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Update"},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
331433
332− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
333435
334− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
335437
336− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
337439
338− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
339441
340− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
341443
342− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
343445
344− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" inc"},"finish_reason":null}]}
345447
346− data: {"id":"chatcmpl-5f2f64db8bf652336ddf40f1","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":5,"completion_tokens":167,"total_tokens":380}}
448+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quote"},"finish_reason":null}]}
347449
348− data: [DONE]
450+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?)"},"finish_reason":null}]}
349451
350− headers:
351− Content-Type:
352− - text/event-stream
353− status: 200 OK
354− code: 200
355− duration: 518.110959ms
356−- id: 1
357− request:
358− proto: HTTP/1.1
359− proto_major: 1
360− proto_minor: 1
361− content_length: 33661
362− host: ""
363− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
364− headers:
365− Accept:
366− - application/json
367− Content-Type:
368− - application/json
369− User-Agent:
370− - Charm-Crush/devel (https://charm.land/crush)
371− url: https://hyper.charm.land/v1/chat/completions
372− method: POST
373− response:
374− proto: HTTP/2.0
375− proto_major: 2
376− proto_minor: 0
377− content_length: -1
378− uncompressed: true
379− body: |+
380− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Actually"},"finish_reason":null}]}
381453
382− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" we"},"finish_reason":null}]}
383455
384− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" probably"},"finish_reason":null}]}
385457
386− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" shouldn't"},"finish_reason":null}]}
387459
388− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" include"},"finish_reason":null}]}
389461
390− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
391463
392− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
393465
394− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
395467
396− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
397469
398− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
399471
400− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
401473
402− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Update"},"finish_reason":null}]}
403475
404− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_c1041a1ca9164f49b628989d","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
405477
406− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\":\"**/main.go\"}"}}]},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
407479
408− data: {"id":"chatcmpl-edee1f120be199268699c7c2","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":64,"completion_tokens":25,"total_tokens":7769}}
480+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
409481
410− data: [DONE]
482+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
411483
412− headers:
413− Content-Type:
414− - text/event-stream
415− status: 200 OK
416− code: 200
417− duration: 5.706396667s
418−- id: 2
419− request:
420− proto: HTTP/1.1
421− proto_major: 1
422− proto_minor: 1
423− content_length: 34027
424− host: ""
425− 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_c1041a1ca9164f49b628989d\",\"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_c1041a1ca9164f49b628989d\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
426− headers:
427− Accept:
428− - application/json
429− Content-Type:
430− - application/json
431− User-Agent:
432− - Charm-Crush/devel (https://charm.land/crush)
433− url: https://hyper.charm.land/v1/chat/completions
434− method: POST
435− response:
436− proto: HTTP/2.0
437− proto_major: 2
438− proto_minor: 0
439− content_length: -1
440− uncompressed: true
441− body: |+
442− data: {"id":"chatcmpl-cc5d6533243ffa215f301479","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
485+
486+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
487+
488+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
489+
490+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
491+
492+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
493+
494+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
495+
496+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
497+
498+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
499+
500+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
501+
502+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
503+
504+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
505+
506+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
507+
508+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
509+
510+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
511+
512+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
513+
514+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
515+
516+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
517+
518+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Characters"},"finish_reason":null}]}
519+
520+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
521+
522+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" U"},"finish_reason":null}]}
523+
524+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
525+
526+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
527+
528+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
529+
530+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" etc"},"finish_reason":null}]}
531+
532+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
533+
534+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
535+
536+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
537+
538+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Update"},"finish_reason":null}]}
539+
540+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
541+
542+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
543+
544+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
545+
546+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
547+
548+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
549+
550+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
551+
552+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
553+
554+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
555+
556+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
557+
558+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
559+
560+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
561+
562+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
563+
564+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
565+
566+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
567+
568+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
569+
570+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
571+
572+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
573+
574+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
575+
576+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
577+
578+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
579+
580+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
581+
582+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
583+
584+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
585+
586+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
587+
588+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
589+
590+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
591+
592+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
593+
594+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
595+
596+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
597+
598+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
443599
444− data: {"id":"chatcmpl-cc5d6533243ffa215f301479","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_f670151d1ac842759ca9cc20","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
445601
446− data: {"id":"chatcmpl-cc5d6533243ffa215f301479","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\"}"}}]},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
447603
448− data: {"id":"chatcmpl-cc5d6533243ffa215f301479","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":36,"completion_tokens":29,"total_tokens":7809}}
604+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
605+
606+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
607+
608+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
609+
610+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
611+
612+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
613+
614+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
615+
616+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
617+
618+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
619+
620+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
621+
622+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
623+
624+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
625+
626+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
627+
628+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
629+
630+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
631+
632+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
633+
634+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
635+
636+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
637+
638+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
639+
640+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
641+
642+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
643+
644+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
645+
646+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
647+
648+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
649+
650+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
651+
652+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
653+
654+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
655+
656+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
657+
658+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
659+
660+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
661+
662+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
663+
664+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
665+
666+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
667+
668+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
669+
670+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
671+
672+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
673+
674+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
675+
676+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
677+
678+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
679+
680+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
681+
682+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
683+
684+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
685+
686+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
687+
688+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
689+
690+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
691+
692+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
693+
694+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
695+
696+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
697+
698+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
699+
700+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
701+
702+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
703+
704+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
705+
706+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
707+
708+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
709+
710+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
711+
712+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Update"},"finish_reason":null}]}
713+
714+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
715+
716+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
717+
718+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
719+
720+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
721+
722+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
723+
724+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
725+
726+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
727+
728+ data: {"id":"chatcmpl-6933cce4991d9cfc91af725c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":37,"completion_tokens":307,"total_tokens":520}}
449729
450730 data: [DONE]
451731
@@ -454,7 +734,7 @@ interactions:
454734 - text/event-stream
455735 status: 200 OK
456736 code: 200
457− duration: 4.151100375s
737+ duration: 645.48275ms
458738- id: 3
459739 request:
460740 proto: HTTP/1.1
@@ -462,7 +742,7 @@ interactions:
462742 proto_minor: 1
463743 content_length: 34493
464744 host: ""
465− 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_c1041a1ca9164f49b628989d\",\"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_c1041a1ca9164f49b628989d\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_f670151d1ac842759ca9cc20\",\"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_f670151d1ac842759ca9cc20\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
745+ 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_2ff8198a89ba48769725fd11\",\"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_2ff8198a89ba48769725fd11\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_f59e4cd2d4504618ac2b1ce0\",\"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_f59e4cd2d4504618ac2b1ce0\",\"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.\",\"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}"
466746 headers:
467747 Accept:
468748 - application/json
@@ -479,13 +759,13 @@ interactions:
479759 content_length: -1
480760 uncompressed: true
481761 body: |+
482− data: {"id":"chatcmpl-1617f1b7ded9cf66036e5397","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
762+ data: {"id":"chatcmpl-c53ea64c0a8862ccac20675d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
483763
484− data: {"id":"chatcmpl-1617f1b7ded9cf66036e5397","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_58db65908ca64b7ebc59e94d","type":"function","index":0,"function":{"name":"edit","arguments":""}}]},"finish_reason":null}]}
764+ data: {"id":"chatcmpl-c53ea64c0a8862ccac20675d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_abfa8c8f93ac4cb9a287f343","type":"function","index":0,"function":{"name":"edit","arguments":""}}]},"finish_reason":null}]}
485765
486− data: {"id":"chatcmpl-1617f1b7ded9cf66036e5397","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"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!\\\")\"}"}}]},"finish_reason":null}]}
766+ data: {"id":"chatcmpl-c53ea64c0a8862ccac20675d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"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!\\\")\"}"}}]},"finish_reason":null}]}
487767
488− data: {"id":"chatcmpl-1617f1b7ded9cf66036e5397","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":57,"completion_tokens":55,"total_tokens":7920}}
768+ data: {"id":"chatcmpl-c53ea64c0a8862ccac20675d","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":121,"completion_tokens":55,"total_tokens":7920}}
489769
490770 data: [DONE]
491771
@@ -494,7 +774,7 @@ interactions:
494774 - text/event-stream
495775 status: 200 OK
496776 code: 200
497− duration: 5.2384995s
777+ duration: 3.901191333s
498778- id: 4
499779 request:
500780 proto: HTTP/1.1
@@ -502,7 +782,7 @@ interactions:
502782 proto_minor: 1
503783 content_length: 35034
504784 host: ""
505− 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_c1041a1ca9164f49b628989d\",\"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_c1041a1ca9164f49b628989d\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_f670151d1ac842759ca9cc20\",\"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_f670151d1ac842759ca9cc20\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_58db65908ca64b7ebc59e94d\",\"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_58db65908ca64b7ebc59e94d\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
785+ 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_2ff8198a89ba48769725fd11\",\"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_2ff8198a89ba48769725fd11\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_f59e4cd2d4504618ac2b1ce0\",\"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_f59e4cd2d4504618ac2b1ce0\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_abfa8c8f93ac4cb9a287f343\",\"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_abfa8c8f93ac4cb9a287f343\",\"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.\",\"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}"
506786 headers:
507787 Accept:
508788 - application/json
@@ -519,37 +799,41 @@ interactions:
519799 content_length: -1
520800 uncompressed: true
521801 body: |+
522− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
802+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
803+
804+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
805+
806+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
523807
524− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Updated"},"finish_reason":null}]}
808+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Updated"},"finish_reason":null}]}
525809
526− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
810+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
527811
528− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
812+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
529813
530− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
814+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
531815
532− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
816+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
533817
534− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
818+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
535819
536− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
820+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
537821
538− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
822+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
539823
540− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
824+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
541825
542− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" \""},"finish_reason":null}]}
826+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" \""},"finish_reason":null}]}
543827
544− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
828+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
545829
546− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
830+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
547831
548− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
832+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
549833
550− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!\""},"finish_reason":null}]}
834+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!\""},"finish_reason":null}]}
551835
552− data: {"id":"chatcmpl-6422e5c6cedd8450a094c41a","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":83,"completion_tokens":16,"total_tokens":7971}}
836+ data: {"id":"chatcmpl-10ce50181e34eb27ebcf4d67","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":147,"completion_tokens":18,"total_tokens":7973}}
553837
554838 data: [DONE]
555839
@@ -558,4 +842,4 @@ interactions:
558842 - text/event-stream
559843 status: 200 OK
560844 code: 200
561− duration: 2.301461167s
845+ duration: 3.401118125s
internal/agent/testdata/TestCoderAgent/glm-5.1/write_tool.yaml+121−131
@@ -25,205 +25,209 @@ interactions:
2525 content_length: -1
2626 uncompressed: true
2727 body: |+
28− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
2929
30− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
3131
32− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
3333
34− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
3535
36− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
3737
38− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
3939
40− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
4141
42− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
4343
44− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" given"},"finish_reason":null}]}
4545
46− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
4747
48− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
4949
50− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
5151
52− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
5353
54− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
5555
56− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
5757
58− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
5959
60− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
6161
62− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" new"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
6363
64− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
6565
66− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" called"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
6767
68− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
6969
70− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
7171
72− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
7373
74− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
7575
76− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '{\""},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
7777
78− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"name"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
7979
80− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
8181
82− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Content"},"finish_reason":null}]}
8383
84− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"test"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
8585
86− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\","},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
8787
88− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
8989
90− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"version"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
9191
92− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
9393
94− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
9595
96− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
9797
98− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" new"},"finish_reason":null}]}
9999
100− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
101101
102− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" called"},"finish_reason":null}]}
103103
104− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
105105
106− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"}"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
107107
108− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
109109
110− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
111111
112− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '{\""},"finish_reason":null}]}
113113
114− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"name"},"finish_reason":null}]}
115115
116− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
117117
118− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
119119
120− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"test"},"finish_reason":null}]}
121121
122− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\","},"finish_reason":null}]}
123123
124− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
125125
126− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"version"},"finish_reason":null}]}
127127
128− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
129129
130− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
131131
132− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
133133
134− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
135135
136− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
137137
138− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
139139
140− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
141141
142− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"col"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"}"},"finish_reason":null}]}
143143
144− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
145145
146− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
147147
148− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
149149
150− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
151151
152− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
153153
154− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
155155
156− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Perhaps"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Create"},"finish_reason":null}]}
157157
158− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
159159
160− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
161161
162− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
163163
164− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
165165
166− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" JSON"},"finish_reason":null}]}
167167
168− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
169169
170− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
171171
172− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" settings"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
173173
174− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
175175
176− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
177177
178− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
179179
180− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
181181
182− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
183183
184− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
185185
186− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
187187
188− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" JSON"},"finish_reason":null}]}
189189
190− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" data"},"finish_reason":null}]}
191191
192− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
193193
194− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" settings"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
195195
196− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
197197
198− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
199199
200− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
201201
202− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
203203
204− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
205205
206− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
207207
208− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
209209
210− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
211211
212− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
213213
214− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
215215
216− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" config"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
217217
218− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" config"},"finish_reason":null}]}
219219
220− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
221221
222− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
223223
224− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" settings"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
225225
226− data: {"id":"chatcmpl-5de54c80d1a8f3193a84f17c","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":3,"completion_tokens":107,"total_tokens":334}}
226+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" JSON"},"finish_reason":null}]}
227+
228+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" data"},"finish_reason":null}]}
229+
230+ data: {"id":"chatcmpl-a5acf5c18b9ab869cdebd547","object":"chat.completion.chunk","created":0,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":51,"completion_tokens":109,"total_tokens":336}}
227231
228232 data: [DONE]
229233
@@ -232,7 +236,7 @@ interactions:
232236 - text/event-stream
233237 status: 200 OK
234238 code: 200
235− duration: 400.28525ms
239+ duration: 599.85525ms
236240- id: 1
237241 request:
238242 proto: HTTP/1.1
@@ -240,7 +244,7 @@ interactions:
240244 proto_minor: 1
241245 content_length: 33698
242246 host: ""
243− 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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
247+ 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.\",\"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}"
244248 headers:
245249 Accept:
246250 - application/json
@@ -257,27 +261,13 @@ interactions:
257261 content_length: -1
258262 uncompressed: true
259263 body: |+
260− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
261−
262− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Simple"},"finish_reason":null}]}
263−
264− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" task"},"finish_reason":null}]}
265−
266− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" -"},"finish_reason":null}]}
267−
268− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
269−
270− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
271−
272− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
273−
274− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-45c1b71f4a24b361d053f9ce","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
275265
276− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_ceadb33c267645ef824dbd83","type":"function","index":0,"function":{"name":"write","arguments":""}}]},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-45c1b71f4a24b361d053f9ce","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_9ba00bcb7fd94be29ce795ed","type":"function","index":0,"function":{"name":"write","arguments":""}}]},"finish_reason":null}]}
277267
278− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"content\":\"{\\\"name\\\": \\\"test\\\", \\\"version\\\": \\\"1.0.0\\\"}\",\"file_path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\"}"}}]},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-45c1b71f4a24b361d053f9ce","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"content\":\"{\\\"name\\\": \\\"test\\\", \\\"version\\\": \\\"1.0.0\\\"}\",\"file_path\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\"}"}}]},"finish_reason":null}]}
279269
280− data: {"id":"chatcmpl-a968f8262469502ef16a0a60","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":14,"completion_tokens":56,"total_tokens":7814}}
270+ data: {"id":"chatcmpl-45c1b71f4a24b361d053f9ce","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}],"usage":{"prompt_tokens":718,"completion_tokens":49,"total_tokens":7807}}
281271
282272 data: [DONE]
283273
@@ -286,15 +276,15 @@ interactions:
286276 - text/event-stream
287277 status: 200 OK
288278 code: 200
289− duration: 6.486736834s
279+ duration: 3.932976875s
290280- id: 2
291281 request:
292282 proto: HTTP/1.1
293283 proto_major: 1
294284 proto_minor: 1
295− content_length: 34227
285+ content_length: 34177
296286 host: ""
297− 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_ceadb33c267645ef824dbd83\",\"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 - write a file.\"},{\"content\":\"<result>\\nFile successfully written: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\\n</result>\",\"tool_call_id\":\"call_ceadb33c267645ef824dbd83\",\"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 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.\",\"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}"
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/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_9ba00bcb7fd94be29ce795ed\",\"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\"},{\"content\":\"<result>\\nFile successfully written: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\\n</result>\",\"tool_call_id\":\"call_9ba00bcb7fd94be29ce795ed\",\"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.\",\"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}"
298288 headers:
299289 Accept:
300290 - application/json
@@ -311,19 +301,19 @@ interactions:
311301 content_length: -1
312302 uncompressed: true
313303 body: |+
314− data: {"id":"chatcmpl-07add96c7dd1c61fa3d439d3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-27b68ad28608ebba6c080f72","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
315305
316− data: {"id":"chatcmpl-07add96c7dd1c61fa3d439d3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Created"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-27b68ad28608ebba6c080f72","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Created"},"finish_reason":null}]}
317307
318− data: {"id":"chatcmpl-07add96c7dd1c61fa3d439d3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-27b68ad28608ebba6c080f72","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
319309
320− data: {"id":"chatcmpl-07add96c7dd1c61fa3d439d3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"config"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-27b68ad28608ebba6c080f72","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"config"},"finish_reason":null}]}
321311
322− data: {"id":"chatcmpl-07add96c7dd1c61fa3d439d3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-27b68ad28608ebba6c080f72","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
323313
324− data: {"id":"chatcmpl-07add96c7dd1c61fa3d439d3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-27b68ad28608ebba6c080f72","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
325315
326− data: {"id":"chatcmpl-07add96c7dd1c61fa3d439d3","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":32,"completion_tokens":7,"total_tokens":7847}}
316+ data: {"id":"chatcmpl-27b68ad28608ebba6c080f72","object":"chat.completion.chunk","created":0,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":96,"completion_tokens":7,"total_tokens":7847}}
327317
328318 data: [DONE]
329319
@@ -332,4 +322,4 @@ interactions:
332322 - text/event-stream
333323 status: 200 OK
334324 code: 200
335− duration: 2.346320208s
325+ duration: 2.974104334s
internal/agent/tools/job_kill.go+1−1
@@ -29,7 +29,7 @@ type JobKillResponseMetadata struct {
2929func NewJobKillTool() fantasy.AgentTool {
3030 return fantasy.NewAgentTool(
3131 JobKillToolName,
32− FirstLineDescription(jobKillDescription),
32+ string(jobKillDescription),
3333 func(ctx context.Context, params JobKillParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
3434 if params.ShellID == "" {
3535 return fantasy.NewTextErrorResponse("missing shell_id"), nil
internal/agent/tools/job_kill.md+1−1
@@ -1,4 +1,4 @@
1−Terminate a background shell process by ID; shell ID becomes invalid after killing.
1+Terminate a background shell process.
22
33<usage>
44- Provide the shell ID returned from a background bash execution
internal/agent/tools/view.go+1−1
@@ -53,7 +53,7 @@ type ViewResponseMetadata struct {
5353
5454const (
5555 ViewToolName = "view"
56− MaxViewSize = 100 * 1024 // 100KB
56+ MaxViewSize = 200 * 1024 // 200KB
5757 DefaultReadLimit = 2000
5858 MaxLineLength = 2000
5959)
internal/agent/tools/view.md+2−2
@@ -1,4 +1,4 @@
1−Read a file by path with line numbers; supports offset and line limit (default 2000, max 100KB); renders images (PNG, JPEG, GIF, BMP, SVG, WebP); use ls for directories.
1+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.
22
33<usage>
44- Provide file path to read
@@ -18,7 +18,7 @@ Read a file by path with line numbers; supports offset and line limit (default 2
1818</features>
1919
2020<limitations>
21−- Max file size: 100KB
21+- Max file size: 200KB
2222- Default limit: 2000 lines
2323- Lines >2000 chars truncated
2424- Binary files (except images) cannot be displayed
internal/app/app.go+17−40
@@ -66,7 +66,7 @@ type App struct {
6666
6767 serviceEventsWG *sync.WaitGroup
6868 eventsCtx context.Context
69− events chan tea.Msg
69+ events *pubsub.Broker[tea.Msg]
7070 tuiWG *sync.WaitGroup
7171
7272 // global context and cleanup functions
@@ -100,7 +100,7 @@ func New(ctx context.Context, conn *sql.DB, store *config.ConfigStore) (*App, er
100100
101101 config: store,
102102
103− events: make(chan tea.Msg, 100),
103+ events: pubsub.NewBroker[tea.Msg](),
104104 serviceEventsWG: &sync.WaitGroup{},
105105 tuiWG: &sync.WaitGroup{},
106106 agentNotifications: pubsub.NewBroker[notify.Notification](),
@@ -153,18 +153,15 @@ func (app *App) Store() *config.ConfigStore {
153153 return app.config
154154}
155155
156−// Events returns the events channel for the application.
157−func (app *App) Events() <-chan tea.Msg {
158− return app.events
156+// Events returns a per-caller subscription channel for application events.
157+// Each caller receives its own channel; all callers receive every event.
158+func (app *App) Events(ctx context.Context) <-chan pubsub.Event[tea.Msg] {
159+ return app.events.Subscribe(ctx)
159160}
160161
161−// SendEvent pushes a message into the application's events channel.
162−// It is non-blocking; the message is dropped if the channel is full.
162+// SendEvent publishes a message to all event subscribers.
163163func (app *App) SendEvent(msg tea.Msg) {
164− select {
165− case app.events <- msg:
166− default:
167− }
164+ app.events.Publish(pubsub.UpdatedEvent, msg)
168165}
169166
170167// AgentNotifications returns the broker for agent notification events.
@@ -233,7 +230,7 @@ func (app *App) RunNonInteractive(ctx context.Context, output io.Writer, prompt,
233230 progress = app.config.Config().Options.Progress == nil || *app.config.Config().Options.Progress
234231
235232 if !hideSpinner && stderrTTY {
236− t := styles.CharmtonePantera()
233+ t := styles.ThemeForProvider(app.config.Config().Models[config.SelectedModelTypeLarge].Provider)
237234
238235 // Detect background color to set the appropriate color for the
239236 // spinner's 'Generating...' text. Without this, that text would be
@@ -486,26 +483,21 @@ func (app *App) setupEvents() {
486483 cleanupFunc := func(context.Context) error {
487484 cancel()
488485 app.serviceEventsWG.Wait()
486+ app.events.Shutdown()
489487 return nil
490488 }
491489 app.cleanupFuncs = append(app.cleanupFuncs, cleanupFunc)
492490}
493491
494−const subscriberSendTimeout = 2 * time.Second
495−
496492func setupSubscriber[T any](
497493 ctx context.Context,
498494 wg *sync.WaitGroup,
499495 name string,
500496 subscriber func(context.Context) <-chan pubsub.Event[T],
501− outputCh chan<- tea.Msg,
497+ broker *pubsub.Broker[tea.Msg],
502498) {
503499 wg.Go(func() {
504500 subCh := subscriber(ctx)
505− sendTimer := time.NewTimer(0)
506− <-sendTimer.C
507− defer sendTimer.Stop()
508−
509501 for {
510502 select {
511503 case event, ok := <-subCh:
@@ -513,23 +505,7 @@ func setupSubscriber[T any](
513505 slog.Debug("Subscription channel closed", "name", name)
514506 return
515507 }
516− var msg tea.Msg = event
517− if !sendTimer.Stop() {
518− select {
519− case <-sendTimer.C:
520− default:
521− }
522− }
523− sendTimer.Reset(subscriberSendTimeout)
524−
525− select {
526− case outputCh <- msg:
527− case <-sendTimer.C:
528− slog.Debug("Message dropped due to slow consumer", "name", name)
529− case <-ctx.Done():
530− slog.Debug("Subscription cancelled", "name", name)
531− return
532− }
508+ broker.Publish(pubsub.UpdatedEvent, tea.Msg(event))
533509 case <-ctx.Done():
534510 slog.Debug("Subscription cancelled", "name", name)
535511 return
@@ -579,17 +555,18 @@ func (app *App) Subscribe(program *tea.Program) {
579555 })
580556 defer app.tuiWG.Done()
581557
558+ events := app.events.Subscribe(tuiCtx)
582559 for {
583560 select {
584561 case <-tuiCtx.Done():
585562 slog.Debug("TUI message handler shutting down")
586563 return
587− case msg, ok := <-app.events:
564+ case ev, ok := <-events:
588565 if !ok {
589566 slog.Debug("TUI message channel closed")
590567 return
591568 }
592− program.Send(msg)
569+ program.Send(ev.Payload)
593570 }
594571 }
595572}
@@ -649,9 +626,9 @@ func (app *App) checkForUpdates(ctx context.Context) {
649626 if err != nil || !info.Available() {
650627 return
651628 }
652− app.events <- UpdateAvailableMsg{
629+ app.events.Publish(pubsub.UpdatedEvent, UpdateAvailableMsg{
653630 CurrentVersion: info.Current,
654631 LatestVersion: info.Latest,
655632 IsDevelopment: info.IsDevelopment(),
656− }
633+ })
657634}
internal/app/app_test.go+133−107
@@ -2,156 +2,182 @@ package app
22
33import (
44 "context"
5+ "fmt"
56 "sync"
67 "testing"
7− "testing/synctest"
88 "time"
99
1010 tea "charm.land/bubbletea/v2"
1111 "github.com/charmbracelet/crush/internal/pubsub"
1212 "github.com/stretchr/testify/require"
13− "go.uber.org/goleak"
1413)
1514
15+// TestSetupSubscriber_NormalFlow verifies that events published to the source
16+// broker are forwarded to the output broker.
1617func TestSetupSubscriber_NormalFlow(t *testing.T) {
17− synctest.Test(t, func(t *testing.T) {
18− f := newSubscriberFixture(t, 10)
18+ t.Parallel()
1919
20− time.Sleep(10 * time.Millisecond)
21− synctest.Wait()
20+ ctx, cancel := context.WithCancel(t.Context())
21+ defer cancel()
2222
23− f.broker.Publish(pubsub.CreatedEvent, "event1")
24− f.broker.Publish(pubsub.CreatedEvent, "event2")
23+ src := pubsub.NewBroker[string]()
24+ defer src.Shutdown()
25+ out := pubsub.NewBroker[tea.Msg]()
26+ defer out.Shutdown()
2527
26− for range 2 {
27− select {
28− case <-f.outputCh:
29− case <-time.After(5 * time.Second):
30− t.Fatal("Timed out waiting for messages")
31− }
28+ ch := out.Subscribe(ctx)
29+
30+ var wg sync.WaitGroup
31+ setupSubscriber(ctx, &wg, "test", src.Subscribe, out)
32+
33+ // Yield so the subscriber goroutine can call src.Subscribe before we publish.
34+ time.Sleep(10 * time.Millisecond)
35+
36+ src.Publish(pubsub.CreatedEvent, "hello")
37+ src.Publish(pubsub.CreatedEvent, "world")
38+
39+ for range 2 {
40+ select {
41+ case <-ch:
42+ case <-time.After(5 * time.Second):
43+ t.Fatal("timed out waiting for forwarded event")
3244 }
45+ }
3346
34− f.cancel()
35− f.wg.Wait()
36− })
47+ cancel()
48+ wg.Wait()
3749}
3850
39−func TestSetupSubscriber_SlowConsumer(t *testing.T) {
40− synctest.Test(t, func(t *testing.T) {
41− f := newSubscriberFixture(t, 0)
51+// TestSetupSubscriber_ContextCancellation verifies the goroutine exits cleanly
52+// when the context is cancelled.
53+func TestSetupSubscriber_ContextCancellation(t *testing.T) {
54+ t.Parallel()
4255
43− const numEvents = 5
56+ ctx, cancel := context.WithCancel(t.Context())
4457
45− var pubWg sync.WaitGroup
46− pubWg.Go(func() {
47− for range numEvents {
48− f.broker.Publish(pubsub.CreatedEvent, "event")
49− time.Sleep(10 * time.Millisecond)
50− synctest.Wait()
51− }
52− })
58+ src := pubsub.NewBroker[string]()
59+ defer src.Shutdown()
60+ out := pubsub.NewBroker[tea.Msg]()
61+ defer out.Shutdown()
5362
54− time.Sleep(time.Duration(numEvents) * (subscriberSendTimeout + 20*time.Millisecond))
55− synctest.Wait()
56−
57− received := 0
58− for {
59− select {
60− case <-f.outputCh:
61− received++
62− default:
63− pubWg.Wait()
64− f.cancel()
65− f.wg.Wait()
66− require.Less(t, received, numEvents, "Slow consumer should have dropped some messages")
67− return
68− }
69− }
70− })
63+ var wg sync.WaitGroup
64+ setupSubscriber(ctx, &wg, "test", src.Subscribe, out)
65+
66+ src.Publish(pubsub.CreatedEvent, "event")
67+ cancel()
68+
69+ done := make(chan struct{})
70+ go func() { wg.Wait(); close(done) }()
71+
72+ select {
73+ case <-done:
74+ case <-time.After(5 * time.Second):
75+ t.Fatal("setupSubscriber goroutine did not exit after context cancellation")
76+ }
7177}
7278
73−func TestSetupSubscriber_ContextCancellation(t *testing.T) {
74− synctest.Test(t, func(t *testing.T) {
75− f := newSubscriberFixture(t, 10)
79+// TestEvents_ZeroConsumers verifies that publishing with no subscribers does
80+// not block or panic.
81+func TestEvents_ZeroConsumers(t *testing.T) {
82+ t.Parallel()
83+
84+ broker := pubsub.NewBroker[tea.Msg]()
85+ defer broker.Shutdown()
86+
87+ require.Equal(t, 0, broker.GetSubscriberCount())
7688
77− f.broker.Publish(pubsub.CreatedEvent, "event1")
78− time.Sleep(100 * time.Millisecond)
79− synctest.Wait()
89+ // Must not block.
90+ done := make(chan struct{})
91+ go func() {
92+ broker.Publish(pubsub.UpdatedEvent, tea.Msg("msg1"))
93+ broker.Publish(pubsub.UpdatedEvent, tea.Msg("msg2"))
94+ close(done)
95+ }()
8096
81− f.cancel()
82− f.wg.Wait()
83− })
97+ select {
98+ case <-done:
99+ case <-time.After(time.Second):
100+ t.Fatal("Publish with zero consumers blocked")
101+ }
84102}
85103
86−func TestSetupSubscriber_DrainAfterDrop(t *testing.T) {
87− synctest.Test(t, func(t *testing.T) {
88− f := newSubscriberFixture(t, 0)
104+// TestEvents_OneConsumer verifies that a single subscriber receives every event
105+// exactly once.
106+func TestEvents_OneConsumer(t *testing.T) {
107+ t.Parallel()
89108
90− time.Sleep(10 * time.Millisecond)
91− synctest.Wait()
109+ ctx, cancel := context.WithCancel(t.Context())
110+ defer cancel()
92111
93− // First event: nobody reads outputCh so the timer fires (message dropped).
94− f.broker.Publish(pubsub.CreatedEvent, "event1")
95− time.Sleep(subscriberSendTimeout + 25*time.Millisecond)
96− synctest.Wait()
112+ broker := pubsub.NewBroker[tea.Msg]()
113+ defer broker.Shutdown()
97114
98− // Second event: triggers Stop()==false path; without the fix this deadlocks.
99− f.broker.Publish(pubsub.CreatedEvent, "event2")
115+ ch := broker.Subscribe(ctx)
100116
101− // If the timer drain deadlocks, wg.Wait never returns.
102− done := make(chan struct{})
103− go func() {
104− f.cancel()
105− f.wg.Wait()
106− close(done)
107− }()
117+ const n = 10
118+ for i := range n {
119+ broker.Publish(pubsub.UpdatedEvent, tea.Msg(i))
120+ }
108121
122+ for i := range n {
109123 select {
110− case <-done:
124+ case ev := <-ch:
125+ require.Equal(t, tea.Msg(i), ev.Payload)
111126 case <-time.After(5 * time.Second):
112− t.Fatal("setupSubscriber goroutine hung — likely timer drain deadlock")
127+ t.Fatalf("timed out waiting for event %d", i)
113128 }
114− })
129+ }
115130}
116131
117−func TestSetupSubscriber_NoTimerLeak(t *testing.T) {
118− defer goleak.VerifyNone(t)
119− synctest.Test(t, func(t *testing.T) {
120− f := newSubscriberFixture(t, 100)
132+// TestEvents_NConsumers verifies that every subscriber receives every event
133+// exactly once, regardless of how many concurrent consumers are attached.
134+func TestEvents_NConsumers(t *testing.T) {
135+ t.Parallel()
121136
122− for range 100 {
123− f.broker.Publish(pubsub.CreatedEvent, "event")
124− time.Sleep(5 * time.Millisecond)
125− synctest.Wait()
126− }
127−
128− f.cancel()
129− f.wg.Wait()
130− })
131−}
132−
133−type subscriberFixture struct {
134− broker *pubsub.Broker[string]
135− wg sync.WaitGroup
136− outputCh chan tea.Msg
137− cancel context.CancelFunc
137+ for _, n := range []int{2, 5, 10} {
138+ t.Run(fmt.Sprintf("consumers=%d", n), func(t *testing.T) {
139+ t.Parallel()
140+ testNConsumers(t, n)
141+ })
142+ }
138143}
139144
140−func newSubscriberFixture(t *testing.T, bufSize int) *subscriberFixture {
145+func testNConsumers(t *testing.T, n int) {
141146 t.Helper()
147+
142148 ctx, cancel := context.WithCancel(t.Context())
143− t.Cleanup(cancel)
149+ defer cancel()
150+
151+ broker := pubsub.NewBroker[tea.Msg]()
152+ defer broker.Shutdown()
144153
145− f := &subscriberFixture{
146− broker: pubsub.NewBroker[string](),
147− outputCh: make(chan tea.Msg, bufSize),
148− cancel: cancel,
154+ // Subscribe all N consumers before publishing.
155+ channels := make([]<-chan pubsub.Event[tea.Msg], n)
156+ for i := range n {
157+ channels[i] = broker.Subscribe(ctx)
149158 }
150− t.Cleanup(f.broker.Shutdown)
159+ require.Equal(t, n, broker.GetSubscriberCount())
151160
152− setupSubscriber(ctx, &f.wg, "test", func(ctx context.Context) <-chan pubsub.Event[string] {
153− return f.broker.Subscribe(ctx)
154− }, f.outputCh)
161+ const numEvents = 20
162+ for i := range numEvents {
163+ broker.Publish(pubsub.UpdatedEvent, tea.Msg(i))
164+ }
155165
156− return f
166+ // Each consumer must receive all numEvents messages.
167+ var wg sync.WaitGroup
168+ for i, ch := range channels {
169+ wg.Go(func() {
170+ for j := range numEvents {
171+ select {
172+ case ev := <-ch:
173+ require.Equal(t, tea.Msg(j), ev.Payload,
174+ "consumer %d: wrong payload for event %d", i, j)
175+ case <-time.After(5 * time.Second):
176+ t.Errorf("consumer %d: timed out waiting for event %d", i, j)
177+ return
178+ }
179+ }
180+ })
181+ }
182+ wg.Wait()
157183}
internal/backend/events.go+5−3
@@ -8,16 +8,18 @@ import (
88 mcptools "github.com/charmbracelet/crush/internal/agent/tools/mcp"
99 "github.com/charmbracelet/crush/internal/app"
1010 "github.com/charmbracelet/crush/internal/config"
11+ "github.com/charmbracelet/crush/internal/pubsub"
1112)
1213
13−// SubscribeEvents returns the event channel for a workspace's app.
14−func (b *Backend) SubscribeEvents(workspaceID string) (<-chan tea.Msg, error) {
14+// SubscribeEvents returns a per-caller event channel for a workspace.
15+// Each caller receives all events; multiple callers do not compete.
16+func (b *Backend) SubscribeEvents(ctx context.Context, workspaceID string) (<-chan pubsub.Event[tea.Msg], error) {
1517 ws, err := b.GetWorkspace(workspaceID)
1618 if err != nil {
1719 return nil, err
1820 }
1921
20− return ws.Events(), nil
22+ return ws.Events(ctx), nil
2123}
2224
2325// GetLSPStates returns the state of all LSP clients.
internal/client/dial_other.go−1
@@ -1,5 +1,4 @@
11//go:build !windows
2−// +build !windows
32
43package client
54
internal/cmd/login.go−4
@@ -9,7 +9,6 @@ import (
99
1010 "charm.land/lipgloss/v2"
1111 "github.com/atotto/clipboard"
12− hyperp "github.com/charmbracelet/crush/internal/agent/hyper"
1312 "github.com/charmbracelet/crush/internal/client"
1413 "github.com/charmbracelet/crush/internal/config"
1514 "github.com/charmbracelet/crush/internal/oauth"
@@ -70,9 +69,6 @@ crush login copilot
7069}
7170
7271func loginHyper(c *client.Client, wsID string) error {
73− if !hyperp.Enabled() {
74− return fmt.Errorf("hyper not enabled")
75− }
7672 ctx := getLoginContext()
7773
7874 resp, err := hyper.InitiateDeviceAuth(ctx)
internal/cmd/root_other.go−1
@@ -1,5 +1,4 @@
11//go:build !windows
2−// +build !windows
32
43package cmd
54
internal/cmd/run.go+1−1
@@ -189,7 +189,7 @@ func runNonInteractive(
189189 progress = ws.Config.Options.Progress == nil || *ws.Config.Options.Progress
190190
191191 if !hideSpinner && stderrTTY {
192− t := styles.CharmtonePantera()
192+ t := styles.ThemeForProvider(ws.Config.Models[config.SelectedModelTypeLarge].Provider)
193193
194194 hasDarkBG := true
195195 if stdinTTY && stdoutTTY {
internal/cmd/server_other.go−1
@@ -1,5 +1,4 @@
11//go:build !windows
2−// +build !windows
32
43package cmd
54
internal/cmd/session.go+10−4
@@ -101,6 +101,7 @@ func init() {
101101type sessionServices struct {
102102 sessions session.Service
103103 messages message.Service
104+ cfg *config.ConfigStore
104105}
105106
106107func sessionSetup(cmd *cobra.Command) (context.Context, *sessionServices, func(), error) {
@@ -127,6 +128,7 @@ func sessionSetup(cmd *cobra.Command) (context.Context, *sessionServices, func()
127128 svc := &sessionServices{
128129 sessions: session.NewService(queries, conn),
129130 messages: message.NewService(queries),
131+ cfg: cfg,
130132 }
131133 return ctx, svc, func() { conn.Close() }, nil
132134}
@@ -280,7 +282,7 @@ func runSessionShow(cmd *cobra.Command, args []string) error {
280282 if sessionShowJSON {
281283 return outputSessionJSON(cmd.OutOrStdout(), sess, msgPtrs)
282284 }
283− return outputSessionHuman(ctx, sess, msgPtrs)
285+ return outputSessionHuman(ctx, svc.cfg, sess, msgPtrs)
284286}
285287
286288func runSessionDelete(cmd *cobra.Command, args []string) error {
@@ -387,7 +389,7 @@ func runSessionLast(cmd *cobra.Command, _ []string) error {
387389 if sessionLastJSON {
388390 return outputSessionJSON(cmd.OutOrStdout(), sess, msgPtrs)
389391 }
390− return outputSessionHuman(ctx, sess, msgPtrs)
392+ return outputSessionHuman(ctx, svc.cfg, sess, msgPtrs)
391393}
392394
393395const (
@@ -437,8 +439,12 @@ func outputSessionJSON(w io.Writer, sess session.Session, msgs []*message.Messag
437439 return enc.Encode(output)
438440}
439441
440−func outputSessionHuman(ctx context.Context, sess session.Session, msgs []*message.Message) error {
441− styles := styles.CharmtonePantera()
442+func outputSessionHuman(ctx context.Context, cfg *config.ConfigStore, sess session.Session, msgs []*message.Message) error {
443+ var providerID string
444+ if cfg != nil {
445+ providerID = cfg.Config().Models[config.SelectedModelTypeLarge].Provider
446+ }
447+ styles := styles.ThemeForProvider(providerID)
442448 toolResults := chat.BuildToolResultMap(msgs)
443449
444450 width := sessionOutputWidth
internal/config/config.go+3−11
@@ -9,7 +9,6 @@ import (
99 "maps"
1010 "net/http"
1111 "net/url"
12− "regexp"
1312 "slices"
1413 "strings"
1514 "time"
@@ -371,7 +370,9 @@ func (t ToolGrep) GetTimeout() time.Duration {
371370}
372371
373372// HookConfig defines a user-configured shell command that fires on a hook
374−// event (e.g. PreToolUse).
373+// event (e.g. PreToolUse). This is a pure-data struct: matcher compilation
374+// is owned by hooks.Runner so a JSON round-trip, merge, or reload can't
375+// silently drop compiled state.
375376type HookConfig struct {
376377 // Regex pattern tested against the tool name. Empty means match all.
377378 Matcher string `json:"matcher,omitempty" jsonschema:"description=Regex pattern tested against the tool name. Empty means match all tools."`
@@ -379,15 +380,6 @@ type HookConfig struct {
379380 Command string `json:"command" jsonschema:"required,description=Shell command to execute when the hook fires"`
380381 // Timeout in seconds. Default 30.
381382 Timeout int `json:"timeout,omitempty" jsonschema:"description=Timeout in seconds for the hook command,default=30"`
382−
383− // Compiled matcher regex. Not serialized.
384− matcherRegex *regexp.Regexp
385−}
386−
387−// MatcherRegex returns the compiled matcher regex, or nil if no matcher is
388−// set.
389−func (h *HookConfig) MatcherRegex() *regexp.Regexp {
390− return h.matcherRegex
391383}
392384
393385// TimeoutDuration returns the hook timeout as a time.Duration, defaulting
internal/config/load.go+11−10
@@ -905,8 +905,11 @@ func normalizeHookEvent(name string) string {
905905 }
906906}
907907
908−// ValidateHooks normalizes event names and compiles matcher regexes for all
909−// configured hooks. Returns an error if any regex is invalid.
908+// ValidateHooks normalizes event names and checks that every configured
909+// hook has a command and a syntactically valid matcher regex. Matcher
910+// compilation used for matching is owned by hooks.Runner; this function
911+// only validates up front so the user sees config errors at load time
912+// rather than on the first tool call.
910913func (c *Config) ValidateHooks() error {
911914 // Normalize event name keys.
912915 for event, eventHooks := range c.Hooks {
@@ -918,17 +921,15 @@ func (c *Config) ValidateHooks() error {
918921 }
919922
920923 for event, eventHooks := range c.Hooks {
921− for i := range eventHooks {
922− h := &c.Hooks[event][i]
924+ for i, h := range eventHooks {
923925 if h.Command == "" {
924926 return fmt.Errorf("hook %s[%d]: command is required", event, i)
925927 }
926− if h.Matcher != "" {
927− re, err := regexp.Compile(h.Matcher)
928− if err != nil {
929− return fmt.Errorf("hook %s[%d]: invalid matcher regex %q: %w", event, i, h.Matcher, err)
930− }
931− h.matcherRegex = re
928+ if h.Matcher == "" {
929+ continue
930+ }
931+ if _, err := regexp.Compile(h.Matcher); err != nil {
932+ return fmt.Errorf("hook %s[%d]: invalid matcher regex %q: %w", event, i, h.Matcher, err)
932933 }
933934 }
934935 }
internal/config/provider.go+1−4
@@ -91,9 +91,6 @@ func UpdateProviders(pathOrURL string) error {
9191
9292// UpdateHyper updates the Hyper provider information from a specified URL.
9393func UpdateHyper(pathOrURL string) error {
94− if !hyper.Enabled() {
95− return fmt.Errorf("hyper not enabled")
96− }
9794 var provider catwalk.Provider
9895 pathOrURL = cmp.Or(pathOrURL, hyper.BaseURL())
9996
@@ -169,7 +166,7 @@ func Providers(cfg *Config) ([]catwalk.Provider, error) {
169166 })
170167
171168 wg.Go(func() {
172− if customProvidersOnly || !hyper.Enabled() {
169+ if customProvidersOnly {
173170 return
174171 }
175172 path := cachePathFor("hyper")
internal/config/reload_hooks_test.gonew file+102
@@ -0,0 +1,102 @@
1+package config_test
2+
3+import (
4+ "context"
5+ "os"
6+ "path/filepath"
7+ "testing"
8+
9+ "github.com/charmbracelet/crush/internal/config"
10+ "github.com/charmbracelet/crush/internal/hooks"
11+ "github.com/stretchr/testify/require"
12+)
13+
14+// TestReloadFromDisk_CompilesHookMatchers is a regression test for a bug
15+// where ReloadFromDisk dropped the compiled matcher regex on every hook,
16+// causing a matcher like "^bash$" to match every tool call after any
17+// SetConfigField-triggered reload.
18+//
19+// The assertion is phrased in terms of observable Runner behavior (not
20+// internal field presence) so it stays valid if the Runner later owns
21+// matcher compilation itself.
22+func TestReloadFromDisk_CompilesHookMatchers(t *testing.T) {
23+ // No t.Parallel(): we Setenv HOME/XDG_CONFIG_HOME to isolate from the
24+ // developer's real global config, which may define its own hooks.
25+ isolated := t.TempDir()
26+ t.Setenv("HOME", isolated)
27+ t.Setenv("XDG_CONFIG_HOME", filepath.Join(isolated, ".config"))
28+ t.Setenv("XDG_DATA_HOME", filepath.Join(isolated, ".local", "share"))
29+
30+ workDir := t.TempDir()
31+ dataDir := t.TempDir()
32+ configPath := filepath.Join(workDir, "crush.json")
33+ cfgJSON := `{
34+ "hooks": {
35+ "PreToolUse": [
36+ {"matcher": "^bash$", "command": "exit 0"}
37+ ]
38+ }
39+ }`
40+ require.NoError(t, os.WriteFile(configPath, []byte(cfgJSON), 0o600))
41+
42+ store, err := config.Load(workDir, dataDir, false)
43+ require.NoError(t, err)
44+
45+ // Sanity: hook filtering works immediately after Load.
46+ assertHookFilters(t, store)
47+
48+ require.NoError(t, store.ReloadFromDisk(context.Background()))
49+
50+ // The actual regression check: filtering must still work after a
51+ // reload, not silently collapse to match-everything.
52+ assertHookFilters(t, store)
53+}
54+
55+// assertHookFilters builds a Runner from the store's current hooks and
56+// verifies the "^bash$" matcher rejects a non-bash tool while accepting
57+// bash.
58+func assertHookFilters(t *testing.T, store *config.ConfigStore) {
59+ t.Helper()
60+ preHooks := store.Config().Hooks[hooks.EventPreToolUse]
61+ require.Len(t, preHooks, 1)
62+
63+ runner := hooks.NewRunner(preHooks, t.TempDir(), t.TempDir())
64+
65+ nonMatch, err := runner.Run(context.Background(), hooks.EventPreToolUse, "sess", "view", `{}`)
66+ require.NoError(t, err)
67+ require.Equal(t, 0, nonMatch.HookCount, "view must not match ^bash$ matcher")
68+
69+ match, err := runner.Run(context.Background(), hooks.EventPreToolUse, "sess", "bash", `{}`)
70+ require.NoError(t, err)
71+ require.Equal(t, 1, match.HookCount, "bash must match ^bash$ matcher")
72+}
73+
74+// TestSetConfigField_AutoReload_PreservesHookMatcherFiltering verifies the
75+// dominant real-world trigger path: config writes call autoReload,
76+// autoReload calls ReloadFromDisk, and hook matching must remain correct.
77+func TestSetConfigField_AutoReload_PreservesHookMatcherFiltering(t *testing.T) {
78+ isolated := t.TempDir()
79+ t.Setenv("HOME", isolated)
80+ t.Setenv("XDG_CONFIG_HOME", filepath.Join(isolated, ".config"))
81+ t.Setenv("XDG_DATA_HOME", filepath.Join(isolated, ".local", "share"))
82+
83+ workDir := t.TempDir()
84+ dataDir := t.TempDir()
85+ configPath := filepath.Join(workDir, "crush.json")
86+ cfgJSON := `{
87+ "hooks": {
88+ "PreToolUse": [
89+ {"matcher": "^bash$", "command": "exit 0"}
90+ ]
91+ }
92+ }`
93+ require.NoError(t, os.WriteFile(configPath, []byte(cfgJSON), 0o600))
94+
95+ store, err := config.Load(workDir, dataDir, false)
96+ require.NoError(t, err)
97+ assertHookFilters(t, store)
98+
99+ require.NoError(t, store.SetConfigField(config.ScopeGlobal, "options.debug", true))
100+
101+ assertHookFilters(t, store)
102+}
internal/config/store.go+68−7
@@ -3,6 +3,7 @@ package config
33import (
44 "cmp"
55 "context"
6+ "encoding/json"
67 "fmt"
78 "log/slog"
89 "os"
@@ -288,6 +289,9 @@ func (s *ConfigStore) SetProviderAPIKey(scope Scope, providerID string, apiKey a
288289}
289290
290291// RefreshOAuthToken refreshes the OAuth token for the given provider.
292+// Before making an external refresh request, it checks the config file on
293+// disk to see if another Crush session has already refreshed the token. If
294+// a newer token is found, it is used instead of refreshing.
291295func (s *ConfigStore) RefreshOAuthToken(ctx context.Context, scope Scope, providerID string) error {
292296 providerConfig, exists := s.config.Providers.Get(providerID)
293297 if !exists {
@@ -298,13 +302,29 @@ func (s *ConfigStore) RefreshOAuthToken(ctx context.Context, scope Scope, provid
298302 return fmt.Errorf("provider %s does not have an OAuth token", providerID)
299303 }
300304
301− var newToken *oauth.Token
305+ // Check if another session refreshed the token recently by reading
306+ // the current token from the config file on disk.
307+ newToken, err := s.loadTokenFromDisk(scope, providerID)
308+ if err != nil {
309+ slog.Warn("Failed to read token from config file, proceeding with refresh", "provider", providerID, "error", err)
310+ } else if newToken != nil && newToken.AccessToken != providerConfig.OAuthToken.AccessToken {
311+ slog.Info("Using token refreshed by another session", "provider", providerID)
312+ providerConfig.OAuthToken = newToken
313+ providerConfig.APIKey = newToken.AccessToken
314+ if providerID == string(catwalk.InferenceProviderCopilot) {
315+ providerConfig.SetupGitHubCopilot()
316+ }
317+ s.config.Providers.Set(providerID, providerConfig)
318+ return nil
319+ }
320+
321+ var refreshedToken *oauth.Token
302322 var refreshErr error
303323 switch providerID {
304324 case string(catwalk.InferenceProviderCopilot):
305− newToken, refreshErr = copilot.RefreshToken(ctx, providerConfig.OAuthToken.RefreshToken)
325+ refreshedToken, refreshErr = copilot.RefreshToken(ctx, providerConfig.OAuthToken.RefreshToken)
306326 case hyperp.Name:
307− newToken, refreshErr = hyper.ExchangeToken(ctx, providerConfig.OAuthToken.RefreshToken)
327+ refreshedToken, refreshErr = hyper.ExchangeToken(ctx, providerConfig.OAuthToken.RefreshToken)
308328 default:
309329 return fmt.Errorf("OAuth refresh not supported for provider %s", providerID)
310330 }
@@ -313,8 +333,8 @@ func (s *ConfigStore) RefreshOAuthToken(ctx context.Context, scope Scope, provid
313333 }
314334
315335 slog.Info("Successfully refreshed OAuth token", "provider", providerID)
316− providerConfig.OAuthToken = newToken
317− providerConfig.APIKey = newToken.AccessToken
336+ providerConfig.OAuthToken = refreshedToken
337+ providerConfig.APIKey = refreshedToken.AccessToken
318338
319339 switch providerID {
320340 case string(catwalk.InferenceProviderCopilot):
@@ -324,8 +344,8 @@ func (s *ConfigStore) RefreshOAuthToken(ctx context.Context, scope Scope, provid
324344 s.config.Providers.Set(providerID, providerConfig)
325345
326346 if err := cmp.Or(
327− s.SetConfigField(scope, fmt.Sprintf("providers.%s.api_key", providerID), newToken.AccessToken),
328− s.SetConfigField(scope, fmt.Sprintf("providers.%s.oauth", providerID), newToken),
347+ s.SetConfigField(scope, fmt.Sprintf("providers.%s.api_key", providerID), refreshedToken.AccessToken),
348+ s.SetConfigField(scope, fmt.Sprintf("providers.%s.oauth", providerID), refreshedToken),
329349 ); err != nil {
330350 return fmt.Errorf("failed to persist refreshed token: %w", err)
331351 }
@@ -333,6 +353,41 @@ func (s *ConfigStore) RefreshOAuthToken(ctx context.Context, scope Scope, provid
333353 return nil
334354}
335355
356+// loadTokenFromDisk reads the OAuth token for the given provider from the
357+// config file on disk. Returns nil if the token is not found or matches the
358+// current in-memory token.
359+func (s *ConfigStore) loadTokenFromDisk(scope Scope, providerID string) (*oauth.Token, error) {
360+ path, err := s.configPath(scope)
361+ if err != nil {
362+ return nil, err
363+ }
364+
365+ data, err := os.ReadFile(path)
366+ if err != nil {
367+ if os.IsNotExist(err) {
368+ return nil, nil
369+ }
370+ return nil, err
371+ }
372+
373+ oauthKey := fmt.Sprintf("providers.%s.oauth", providerID)
374+ oauthResult := gjson.Get(string(data), oauthKey)
375+ if !oauthResult.Exists() {
376+ return nil, nil
377+ }
378+
379+ var token oauth.Token
380+ if err := json.Unmarshal([]byte(oauthResult.Raw), &token); err != nil {
381+ return nil, err
382+ }
383+
384+ if token.AccessToken == "" {
385+ return nil, nil
386+ }
387+
388+ return &token, nil
389+}
390+
336391// recordRecentModel records a model in the recent models list.
337392func (s *ConfigStore) recordRecentModel(scope Scope, modelType SelectedModelType, model SelectedModel) error {
338393 if model.Provider == "" || model.Model == "" {
@@ -590,6 +645,12 @@ func (s *ConfigStore) ReloadFromDisk(ctx context.Context) error {
590645 }
591646 }
592647
648+ // Validate hooks after all config merging is complete so matcher
649+ // regexes are recompiled on the reloaded config (mirrors Load).
650+ if err := cfg.ValidateHooks(); err != nil {
651+ return fmt.Errorf("invalid hook configuration on reload: %w", err)
652+ }
653+
593654 // Preserve runtime overrides
594655 overrides := s.overrides
595656
internal/config/store_test.go+182
@@ -8,6 +8,8 @@ import (
88 "testing"
99 "time"
1010
11+ "github.com/charmbracelet/crush/internal/csync"
12+ "github.com/charmbracelet/crush/internal/oauth"
1113 "github.com/stretchr/testify/require"
1214)
1315
@@ -510,3 +512,183 @@ func TestAutoReloadDisabledDuringReload(t *testing.T) {
510512 // Verify reload completed successfully
511513 require.False(t, store.autoReloadDisabled, "autoReloadDisabled should be false after ReloadFromDisk")
512514}
515+
516+func TestLoadTokenFromDisk_ReturnsNewerToken(t *testing.T) {
517+ t.Parallel()
518+
519+ dir := t.TempDir()
520+ configPath := filepath.Join(dir, "crush.json")
521+
522+ // Create config file with a newer token on disk
523+ configContent := `{
524+ "providers": {
525+ "hyper": {
526+ "oauth": {
527+ "access_token": "newer-token-from-disk",
528+ "refresh_token": "refresh-abc",
529+ "expires_in": 3600,
530+ "expires_at": 9999999999
531+ }
532+ }
533+ }
534+ }`
535+ require.NoError(t, os.WriteFile(configPath, []byte(configContent), 0o600))
536+
537+ store := &ConfigStore{
538+ config: &Config{},
539+ globalDataPath: configPath,
540+ }
541+
542+ token, err := store.loadTokenFromDisk(ScopeGlobal, "hyper")
543+ require.NoError(t, err)
544+ require.NotNil(t, token)
545+ require.Equal(t, "newer-token-from-disk", token.AccessToken)
546+ require.Equal(t, "refresh-abc", token.RefreshToken)
547+ require.Equal(t, 3600, token.ExpiresIn)
548+ require.Equal(t, int64(9999999999), token.ExpiresAt)
549+}
550+
551+func TestLoadTokenFromDisk_ReturnsNilWhenSameToken(t *testing.T) {
552+ t.Parallel()
553+
554+ dir := t.TempDir()
555+ configPath := filepath.Join(dir, "crush.json")
556+
557+ // Create config file with the same token
558+ configContent := `{
559+ "providers": {
560+ "hyper": {
561+ "oauth": {
562+ "access_token": "same-token",
563+ "refresh_token": "refresh-abc",
564+ "expires_in": 3600,
565+ "expires_at": 9999999999
566+ }
567+ }
568+ }
569+ }`
570+ require.NoError(t, os.WriteFile(configPath, []byte(configContent), 0o600))
571+
572+ store := &ConfigStore{
573+ config: &Config{},
574+ globalDataPath: configPath,
575+ }
576+
577+ token, err := store.loadTokenFromDisk(ScopeGlobal, "hyper")
578+ require.NoError(t, err)
579+ require.NotNil(t, token)
580+ require.Equal(t, "same-token", token.AccessToken)
581+}
582+
583+func TestLoadTokenFromDisk_ReturnsNilWhenFileMissing(t *testing.T) {
584+ t.Parallel()
585+
586+ dir := t.TempDir()
587+ configPath := filepath.Join(dir, "nonexistent.json")
588+
589+ store := &ConfigStore{
590+ config: &Config{},
591+ globalDataPath: configPath,
592+ }
593+
594+ token, err := store.loadTokenFromDisk(ScopeGlobal, "hyper")
595+ require.NoError(t, err)
596+ require.Nil(t, token)
597+}
598+
599+func TestLoadTokenFromDisk_ReturnsNilWhenProviderMissing(t *testing.T) {
600+ t.Parallel()
601+
602+ dir := t.TempDir()
603+ configPath := filepath.Join(dir, "crush.json")
604+
605+ // Create config file without the hyper provider
606+ configContent := `{"providers": {"openai": {"api_key": "test-key"}}}`
607+ require.NoError(t, os.WriteFile(configPath, []byte(configContent), 0o600))
608+
609+ store := &ConfigStore{
610+ config: &Config{},
611+ globalDataPath: configPath,
612+ }
613+
614+ token, err := store.loadTokenFromDisk(ScopeGlobal, "hyper")
615+ require.NoError(t, err)
616+ require.Nil(t, token)
617+}
618+
619+func TestLoadTokenFromDisk_ReturnsNilWhenOAuthMissing(t *testing.T) {
620+ t.Parallel()
621+
622+ dir := t.TempDir()
623+ configPath := filepath.Join(dir, "crush.json")
624+
625+ // Create config file with provider but no OAuth token
626+ configContent := `{"providers": {"hyper": {"api_key": "test-key"}}}`
627+ require.NoError(t, os.WriteFile(configPath, []byte(configContent), 0o600))
628+
629+ store := &ConfigStore{
630+ config: &Config{},
631+ globalDataPath: configPath,
632+ }
633+
634+ token, err := store.loadTokenFromDisk(ScopeGlobal, "hyper")
635+ require.NoError(t, err)
636+ require.Nil(t, token)
637+}
638+
639+func TestRefreshOAuthToken_UsesDiskTokenWhenDifferent(t *testing.T) {
640+ t.Parallel()
641+
642+ dir := t.TempDir()
643+ configPath := filepath.Join(dir, "crush.json")
644+
645+ // Create config file with a newer token on disk
646+ configContent := `{
647+ "providers": {
648+ "hyper": {
649+ "api_key": "newer-access-token",
650+ "oauth": {
651+ "access_token": "newer-access-token",
652+ "refresh_token": "refresh-abc",
653+ "expires_in": 3600,
654+ "expires_at": 9999999999
655+ }
656+ }
657+ }
658+ }`
659+ require.NoError(t, os.WriteFile(configPath, []byte(configContent), 0o600))
660+
661+ // Set up store with an older in-memory token
662+ oldToken := &oauth.Token{
663+ AccessToken: "older-access-token",
664+ RefreshToken: "refresh-abc",
665+ ExpiresIn: 3600,
666+ ExpiresAt: time.Now().Add(-time.Hour).Unix(), // Expired
667+ }
668+
669+ providers := csync.NewMap[string, ProviderConfig]()
670+ providers.Set("hyper", ProviderConfig{
671+ ID: "hyper",
672+ Name: "Hyper",
673+ APIKey: oldToken.AccessToken,
674+ OAuthToken: oldToken,
675+ })
676+
677+ store := &ConfigStore{
678+ config: &Config{
679+ Providers: providers,
680+ },
681+ globalDataPath: configPath,
682+ }
683+
684+ // Refresh should use the disk token without making an external call
685+ err := store.RefreshOAuthToken(context.Background(), ScopeGlobal, "hyper")
686+ require.NoError(t, err)
687+
688+ // Verify the in-memory token was updated to the disk token
689+ updatedConfig, ok := store.config.Providers.Get("hyper")
690+ require.True(t, ok)
691+ require.Equal(t, "newer-access-token", updatedConfig.APIKey)
692+ require.Equal(t, "newer-access-token", updatedConfig.OAuthToken.AccessToken)
693+ require.Equal(t, "refresh-abc", updatedConfig.OAuthToken.RefreshToken)
694+}
internal/db/connect.go+7
@@ -50,6 +50,13 @@ func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
5050 return nil, err
5151 }
5252
53+ // Serialize all access through a single connection. SQLite serializes
54+ // writes at the file level anyway, and allowing multiple pool
55+ // connections to interleave writes/checkpoints (especially under
56+ // concurrent sub-agents) has caused WAL/header desync resulting in
57+ // SQLITE_NOTADB (26) on the next open.
58+ db.SetMaxOpenConns(1)
59+
5360 if err = db.PingContext(ctx); err != nil {
5461 db.Close()
5562 return nil, fmt.Errorf("failed to connect to database: %w", err)
internal/db/connect_modernc.go+3
@@ -17,6 +17,9 @@ func openDB(dbPath string) (*sql.DB, error) {
1717 for name, value := range pragmas {
1818 params.Add("_pragma", fmt.Sprintf("%s(%s)", name, value))
1919 }
20+ // Use BEGIN IMMEDIATE so writers acquire the reserved lock up front,
21+ // preventing deferred-to-writer upgrade deadlocks.
22+ params.Set("_txlock", "immediate")
2023
2124 dsn := fmt.Sprintf("file:%s?%s", dbPath, params.Encode())
2225 db, err := sql.Open("sqlite", dsn)
internal/db/connect_ncruces.go+5−1
@@ -11,7 +11,11 @@ import (
1111)
1212
1313func openDB(dbPath string) (*sql.DB, error) {
14− db, err := driver.Open(dbPath, func(c *sqlite3.Conn) error {
14+ // Use BEGIN IMMEDIATE so writers acquire the reserved lock up front,
15+ // preventing deferred-to-writer upgrade deadlocks. The "file:" prefix
16+ // is required for the ncruces driver to parse query parameters.
17+ dsn := fmt.Sprintf("file:%s?_txlock=immediate", dbPath)
18+ db, err := driver.Open(dsn, func(c *sqlite3.Conn) error {
1519 // Set pragmas for better performance via _pragma query params.
1620 // Format: PRAGMA name = value;
1721 for name, value := range pragmas {
internal/hooks/hooks_test.go+34
@@ -383,6 +383,40 @@ func TestRunnerMatcherFiltering(t *testing.T) {
383383 require.NoError(t, err)
384384 require.Equal(t, DecisionNone, result.Decision)
385385 })
386+
387+ // Runner must compile matchers itself; it cannot rely on
388+ // ValidateHooks having run first. This is the guarantee that prevents
389+ // the reload-drops-matcher class of bug.
390+ t.Run("runner compiles matcher without ValidateHooks", func(t *testing.T) {
391+ t.Parallel()
392+ raw := []config.HookConfig{
393+ {Command: `echo '{"decision":"deny","reason":"blocked"}'`, Matcher: "^bash$"},
394+ }
395+ r := NewRunner(raw, t.TempDir(), t.TempDir())
396+
397+ deny, err := r.Run(context.Background(), EventPreToolUse, "sess", "bash", `{}`)
398+ require.NoError(t, err)
399+ require.Equal(t, DecisionDeny, deny.Decision)
400+
401+ noop, err := r.Run(context.Background(), EventPreToolUse, "sess", "view", `{}`)
402+ require.NoError(t, err)
403+ require.Equal(t, DecisionNone, noop.Decision)
404+ })
405+
406+ // A matcher that fails to compile at Runner construction must not
407+ // degrade to match-everything; the hook is dropped instead.
408+ t.Run("runner skips hooks with invalid matcher", func(t *testing.T) {
409+ t.Parallel()
410+ raw := []config.HookConfig{
411+ {Command: `echo '{"decision":"deny","reason":"should not fire"}'`, Matcher: "[invalid"},
412+ }
413+ r := NewRunner(raw, t.TempDir(), t.TempDir())
414+
415+ result, err := r.Run(context.Background(), EventPreToolUse, "sess", "bash", `{}`)
416+ require.NoError(t, err)
417+ require.Equal(t, DecisionNone, result.Decision)
418+ require.Empty(t, r.Hooks())
419+ })
386420}
387421
388422func TestValidateHooksInvalidRegex(t *testing.T) {
internal/hooks/runner.go+46−8
@@ -4,6 +4,7 @@ import (
44 "bytes"
55 "context"
66 "log/slog"
7+ "regexp"
78 "strings"
89 "sync"
910 "time"
@@ -24,25 +25,63 @@ const abandonGrace = time.Second
2425// depending on the scheduling behavior of the real interpreter.
2526var runShell = shell.Run
2627
28+// compiledHook pairs a HookConfig with its compiled matcher regex. A nil
29+// matcher means "match every tool".
30+type compiledHook struct {
31+ cfg config.HookConfig
32+ matcher *regexp.Regexp
33+}
34+
2735// Runner executes hook commands and aggregates their results.
2836type Runner struct {
29− hooks []config.HookConfig
37+ hooks []compiledHook
3038 cwd string
3139 projectDir string
3240}
3341
34−// NewRunner creates a Runner from the given hook configs.
42+// NewRunner creates a Runner from the given hook configs. Each hook's
43+// Matcher is compiled here so the Runner is self-sufficient; callers do
44+// not have to pre-compile matchers on the config, and reloads or merges
45+// that rebuild HookConfig values can't silently strip compiled state.
46+//
47+// Hooks whose matcher fails to compile are skipped with a warning rather
48+// than treated as match-everything. ValidateHooks is expected to have
49+// caught syntax errors earlier, so this is defense in depth.
3550func NewRunner(hooks []config.HookConfig, cwd, projectDir string) *Runner {
51+ compiled := make([]compiledHook, 0, len(hooks))
52+ for _, h := range hooks {
53+ ch := compiledHook{cfg: h}
54+ if h.Matcher != "" {
55+ re, err := regexp.Compile(h.Matcher)
56+ if err != nil {
57+ slog.Warn("Hook matcher failed to compile; skipping hook",
58+ "matcher", h.Matcher,
59+ "command", h.Command,
60+ "error", err,
61+ )
62+ continue
63+ }
64+ ch.matcher = re
65+ }
66+ compiled = append(compiled, ch)
67+ }
3668 return &Runner{
37− hooks: hooks,
69+ hooks: compiled,
3870 cwd: cwd,
3971 projectDir: projectDir,
4072 }
4173}
4274
43−// Hooks returns the hook configs the runner was created with.
75+// Hooks returns the hook configs the runner was created with, in config
76+// order. Hooks whose matcher failed to compile at construction are
77+// omitted. Intended for diagnostics; callers should not rely on ordering
78+// or identity beyond that.
4479func (r *Runner) Hooks() []config.HookConfig {
45− return r.hooks
80+ out := make([]config.HookConfig, len(r.hooks))
81+ for i, h := range r.hooks {
82+ out[i] = h.cfg
83+ }
84+ return out
4685}
4786
4887// Run executes all matching hooks for the given event and tool, returning
@@ -105,9 +144,8 @@ func (r *Runner) Run(ctx context.Context, eventName, sessionID, toolName, toolIn
105144func (r *Runner) matchingHooks(toolName string) []config.HookConfig {
106145 var matched []config.HookConfig
107146 for _, h := range r.hooks {
108− re := h.MatcherRegex()
109− if re == nil || re.MatchString(toolName) {
110− matched = append(matched, h)
147+ if h.matcher == nil || h.matcher.MatchString(toolName) {
148+ matched = append(matched, h.cfg)
111149 }
112150 }
113151 return matched
internal/server/net_other.go−1
@@ -1,5 +1,4 @@
11//go:build !windows
2−// +build !windows
32
43package server
54
internal/server/proto.go+3−3
@@ -199,7 +199,7 @@ func (c *controllerV1) handleGetWorkspaceProviders(w http.ResponseWriter, r *htt
199199func (c *controllerV1) handleGetWorkspaceEvents(w http.ResponseWriter, r *http.Request) {
200200 flusher := http.NewResponseController(w)
201201 id := r.PathValue("id")
202− events, err := c.backend.SubscribeEvents(id)
202+ events, err := c.backend.SubscribeEvents(r.Context(), id)
203203 if err != nil {
204204 c.handleError(w, r, err)
205205 return
@@ -218,8 +218,8 @@ func (c *controllerV1) handleGetWorkspaceEvents(w http.ResponseWriter, r *http.R
218218 if !ok {
219219 return
220220 }
221− c.server.logDebug(r, "Sending event", "event", fmt.Sprintf("%T %+v", ev, ev))
222− wrapped := wrapEvent(ev)
221+ c.server.logDebug(r, "Sending event", "event", fmt.Sprintf("%T %+v", ev.Payload, ev.Payload))
222+ wrapped := wrapEvent(ev.Payload)
223223 if wrapped == nil {
224224 continue
225225 }
internal/ui/attachments/attachments.go+12
@@ -78,6 +78,10 @@ func (m *Attachments) Render(width int) string {
7878 return m.renderer.Render(m.list, m.deleting, width)
7979}
8080
81+// Renderer returns the attachment renderer so callers can update its
82+// styles in place.
83+func (m *Attachments) Renderer() *Renderer { return m.renderer }
84+
8185func NewRenderer(normalStyle, deletingStyle, imageStyle, textStyle lipgloss.Style) *Renderer {
8286 return &Renderer{
8387 normalStyle: normalStyle,
@@ -87,6 +91,14 @@ func NewRenderer(normalStyle, deletingStyle, imageStyle, textStyle lipgloss.Styl
8791 }
8892}
8993
94+// SetStyles updates the renderer styles in place.
95+func (r *Renderer) SetStyles(normalStyle, deletingStyle, imageStyle, textStyle lipgloss.Style) {
96+ r.normalStyle = normalStyle
97+ r.textStyle = textStyle
98+ r.imageStyle = imageStyle
99+ r.deletingStyle = deletingStyle
100+}
101+
90102type Renderer struct {
91103 normalStyle, textStyle, imageStyle, deletingStyle lipgloss.Style
92104}
internal/ui/chat/messages.go+16
@@ -128,6 +128,22 @@ func defaultHighlighter(sty *styles.Styles) *highlightableMessageItem {
128128 }
129129}
130130
131+// cacheClearable is implemented by message items that cache rendered
132+// output and can be asked to drop the cache.
133+type cacheClearable interface {
134+ clearCache()
135+}
136+
137+// ClearItemCaches drops any cached rendered output on each item so the
138+// next render uses the current styles.
139+func ClearItemCaches(items []MessageItem) {
140+ for _, item := range items {
141+ if cc, ok := item.(cacheClearable); ok {
142+ cc.clearCache()
143+ }
144+ }
145+}
146+
131147// cachedMessageItem caches rendered message content to avoid re-rendering.
132148//
133149// This should be used by any message that can store a cached version of its render. e.x user,assistant... and so on
internal/ui/chat/tools.go+11−6
@@ -797,22 +797,27 @@ func renderHookLine(sty *styles.Styles, hi hooks.HookInfo, rawName, detail strin
797797
798798// hookDetail returns the styled detail text for a single hook result.
799799func hookDetail(sty *styles.Styles, hi hooks.HookInfo) string {
800+ const (
801+ okMessage = "OK"
802+ denialMessage = "Denied"
803+ rewroteMessage = "Rewrote Output"
804+ )
800805 switch hi.Decision {
801806 case "deny":
802807 if hi.Reason != "" {
803− return sty.Tool.HookDenied.Render("Denied") + " " + sty.Tool.HookDeniedReason.Render(hi.Reason)
808+ return sty.Tool.HookDenied.Render(denialMessage) + " " + sty.Tool.HookDeniedReason.Render(hi.Reason)
804809 }
805− return sty.Tool.HookDenied.Render("Denied")
810+ return sty.Tool.HookDenied.Render(denialMessage)
806811 case "allow":
807− result := sty.Tool.HookOK.Render("OK")
812+ result := sty.Tool.HookOK.Render(okMessage)
808813 if hi.InputRewrite {
809− result += " " + sty.Tool.HookRewrote.Render("Rewrote Input")
814+ result += " " + sty.Tool.HookRewrote.Render(rewroteMessage)
810815 }
811816 return result
812817 default:
813− result := sty.Tool.HookOK.Render("OK")
818+ result := sty.Tool.HookOK.Render(okMessage)
814819 if hi.InputRewrite {
815− result += " " + sty.Tool.HookRewrote.Render("Rewrote Input")
820+ result += " " + sty.Tool.HookRewrote.Render(rewroteMessage)
816821 }
817822 return result
818823 }
internal/ui/common/common.go+23−2
@@ -31,15 +31,36 @@ func (c *Common) Config() *config.Config {
3131 return c.Workspace.Config()
3232}
3333
34−// DefaultCommon returns the default common UI configurations.
34+// DefaultCommon returns the default common UI configurations. When the
35+// workspace has a large model selected, the theme is chosen based on its
36+// provider; otherwise the default theme is used.
3537func DefaultCommon(ws workspace.Workspace) *Common {
36− s := styles.CharmtonePantera()
38+ s := styles.ThemeForProvider(largeModelProviderID(ws))
3739 return &Common{
3840 Workspace: ws,
3941 Styles: &s,
4042 }
4143}
4244
45+// largeModelProviderID returns the provider ID of the currently selected
46+// large model, or the empty string if none is set or the workspace is nil.
47+func largeModelProviderID(ws workspace.Workspace) string {
48+ if ws == nil {
49+ return ""
50+ }
51+ cfg := ws.Config()
52+ if cfg == nil {
53+ return ""
54+ }
55+ return cfg.Models[config.SelectedModelTypeLarge].Provider
56+}
57+
58+// IsHyper reports whether the currently selected large model is provided
59+// by Hyper.
60+func (c *Common) IsHyper() bool {
61+ return largeModelProviderID(c.Workspace) == "hyper"
62+}
63+
4364// CenterRect returns a new [Rectangle] centered within the given area with the
4465// specified width and height.
4566func CenterRect(area uv.Rectangle, width, height int) uv.Rectangle {
internal/ui/common/elements.go+32−1
@@ -4,9 +4,11 @@ import (
44 "cmp"
55 "fmt"
66 "image/color"
7+ "strconv"
78 "strings"
89
910 "charm.land/lipgloss/v2"
11+ "github.com/charmbracelet/crush/internal/agent/hyper"
1012 "github.com/charmbracelet/crush/internal/home"
1113 "github.com/charmbracelet/crush/internal/ui/styles"
1214 "github.com/charmbracelet/x/ansi"
@@ -38,7 +40,7 @@ type ModelContextInfo struct {
3840
3941// ModelInfo renders model information including name, provider, reasoning
4042// settings, and optional context usage/cost.
41−func ModelInfo(t *styles.Styles, modelName, providerName, reasoningInfo string, context *ModelContextInfo, width int) string {
43+func ModelInfo(t *styles.Styles, modelName, providerName, reasoningInfo string, context *ModelContextInfo, width int, hyperCredits *int) string {
4244 modelIcon := t.ModelInfo.Icon.Render(styles.ModelIcon)
4345 modelName = t.ModelInfo.Name.Render(modelName)
4446
@@ -76,6 +78,13 @@ func ModelInfo(t *styles.Styles, modelName, providerName, reasoningInfo string,
7678 parts = append(parts, lipgloss.NewStyle().PaddingLeft(2).Render(formattedInfo))
7779 }
7880
81+ if providerName == hyper.DisplayName && hyperCredits != nil {
82+ hcInfo := t.ModelInfo.HypercreditIcon.Render(styles.HypercreditIcon)
83+ hcInfo += " "
84+ hcInfo += t.ModelInfo.HypercreditText.Render(fmt.Sprintf("%s Hypercredits", FormatCredits(*hyperCredits)))
85+ parts = append(parts, "", hcInfo)
86+ }
87+
7988 return lipgloss.NewStyle().Width(width).Render(
8089 lipgloss.JoinVertical(lipgloss.Left, parts...),
8190 )
@@ -115,6 +124,28 @@ func formatTokensAndCost(t *styles.Styles, tokens, contextWindow int64, cost flo
115124 return fmt.Sprintf("%s %s", formattedTokens, formattedCost)
116125}
117126
127+// FormatCredits formats an integer with comma separators for thousands.
128+func FormatCredits(n int) string {
129+ s := strconv.FormatInt(int64(n), 10)
130+ if n < 1000 {
131+ return s
132+ }
133+ // Calculate how many digits before the first comma.
134+ firstGroup := len(s) % 3
135+ if firstGroup == 0 {
136+ firstGroup = 3
137+ }
138+ var b []byte
139+ for i := 0; i < len(s); i++ {
140+ if i > 0 && i == firstGroup {
141+ b = append(b, ',')
142+ firstGroup += 3
143+ }
144+ b = append(b, s[i])
145+ }
146+ return string(b)
147+}
148+
118149// StatusOpts defines options for rendering a status line with icon, title,
119150// description, and optional extra content.
120151type StatusOpts struct {
internal/ui/common/markdown.go+34−2
@@ -2,6 +2,7 @@ package common
22
33import (
44 "image/color"
5+ "sync"
56
67 "charm.land/glamour/v2"
78 "github.com/alecthomas/chroma/v2/formatters"
@@ -18,24 +19,55 @@ func init() {
1819 formatters.Register(formatterName, xchroma.Formatter(zero, nil))
1920}
2021
22+var (
23+ mdCacheMu sync.Mutex
24+ mdCache = map[int]*glamour.TermRenderer{}
25+ quietMDCache = map[int]*glamour.TermRenderer{}
26+)
27+
2128// MarkdownRenderer returns a glamour [glamour.TermRenderer] configured with
22−// the given styles and width.
29+// the given styles and width. Renderers are memoized per width and shared
30+// across callers; call InvalidateMarkdownRendererCache when the active
31+// styles change.
2332func MarkdownRenderer(sty *styles.Styles, width int) *glamour.TermRenderer {
33+ mdCacheMu.Lock()
34+ defer mdCacheMu.Unlock()
35+ if r, ok := mdCache[width]; ok {
36+ return r
37+ }
2438 r, _ := glamour.NewTermRenderer(
2539 glamour.WithStyles(sty.Markdown),
2640 glamour.WithWordWrap(width),
2741 glamour.WithChromaFormatter(formatterName),
2842 )
43+ mdCache[width] = r
2944 return r
3045}
3146
3247// QuietMarkdownRenderer returns a glamour [glamour.TermRenderer] with no colors
33−// (plain text with structure) and the given width.
48+// (plain text with structure) and the given width. Renderers are memoized per
49+// width and shared across callers.
3450func QuietMarkdownRenderer(sty *styles.Styles, width int) *glamour.TermRenderer {
51+ mdCacheMu.Lock()
52+ defer mdCacheMu.Unlock()
53+ if r, ok := quietMDCache[width]; ok {
54+ return r
55+ }
3556 r, _ := glamour.NewTermRenderer(
3657 glamour.WithStyles(sty.QuietMarkdown),
3758 glamour.WithWordWrap(width),
3859 glamour.WithChromaFormatter(formatterName),
3960 )
61+ quietMDCache[width] = r
4062 return r
4163}
64+
65+// InvalidateMarkdownRendererCache drops every cached renderer. Call this
66+// whenever the active styles change so subsequent renderers pick up the new
67+// ansi.StyleConfig.
68+func InvalidateMarkdownRendererCache() {
69+ mdCacheMu.Lock()
70+ defer mdCacheMu.Unlock()
71+ mdCache = map[int]*glamour.TermRenderer{}
72+ quietMDCache = map[int]*glamour.TermRenderer{}
73+}
internal/ui/completions/completions.go+9
@@ -110,6 +110,15 @@ func New(normalStyle, focusedStyle, matchStyle lipgloss.Style) *Completions {
110110 }
111111}
112112
113+// SetStyles updates the styles used when rendering completion items.
114+// Existing items are not restyled; subsequent SetItems calls pick up the
115+// new styles.
116+func (c *Completions) SetStyles(normalStyle, focusedStyle, matchStyle lipgloss.Style) {
117+ c.normalStyle = normalStyle
118+ c.focusedStyle = focusedStyle
119+ c.matchStyle = matchStyle
120+}
121+
113122// IsOpen returns whether the completions popup is open.
114123func (c *Completions) IsOpen() bool {
115124 return c.open
internal/ui/dialog/oauth.go+17−17
@@ -222,7 +222,7 @@ func (m *OAuth) headerContent() string {
222222 textStyle = t.Dialog.PrimaryText
223223 dialogStyle = t.Dialog.View.Width(m.width)
224224 headerOffset = titleStyle.GetHorizontalFrameSize() + dialogStyle.GetHorizontalFrameSize()
225− dialogTitle = fmt.Sprintf("Authenticate with %s", m.oAuthProvider.name())
225+ dialogTitle = fmt.Sprintf("Let’s authenticate with %s", m.oAuthProvider.name())
226226 )
227227 if m.isOnboarding {
228228 return textStyle.Render(dialogTitle)
@@ -232,13 +232,13 @@ func (m *OAuth) headerContent() string {
232232
233233func (m *OAuth) innerDialogContent() string {
234234 var (
235− t = m.com.Styles
236− whiteStyle = t.Dialog.OAuth.Instructions
237− primaryStyle = t.Dialog.OAuth.Enter
238− greenStyle = t.Dialog.OAuth.Success
239− linkStyle = t.Dialog.OAuth.Link
240− errorStyle = t.Dialog.OAuth.ErrorText
241− mutedStyle = t.Dialog.OAuth.StatusText
235+ t = m.com.Styles
236+ instructionStyle = t.Dialog.OAuth.Instructions
237+ enterKeyStyle = t.Dialog.OAuth.Enter
238+ successStyle = t.Dialog.OAuth.Success
239+ linkStyle = t.Dialog.OAuth.Link
240+ errorStyle = t.Dialog.OAuth.ErrorText
241+ statusTextStyle = t.Dialog.OAuth.StatusText
242242 )
243243
244244 switch m.State {
@@ -248,8 +248,8 @@ func (m *OAuth) innerDialogContent() string {
248248 Width(m.width - 2).
249249 Align(lipgloss.Center).
250250 Render(
251− greenStyle.Render(m.spinner.View()) +
252− mutedStyle.Render("Initializing..."),
251+ successStyle.Render(m.spinner.View()) +
252+ statusTextStyle.Render("Initializing..."),
253253 )
254254
255255 case OAuthStateDisplay:
@@ -257,9 +257,9 @@ func (m *OAuth) innerDialogContent() string {
257257 Margin(0, 1).
258258 Width(m.width - 2).
259259 Render(
260− whiteStyle.Render("Press ") +
261− primaryStyle.Render("enter") +
262− whiteStyle.Render(" to copy the code below and open the browser."),
260+ instructionStyle.Render("Press ") +
261+ enterKeyStyle.Render("enter") +
262+ instructionStyle.Render(" to copy the code below and open the browser."),
263263 )
264264
265265 codeBox := lipgloss.NewStyle().
@@ -273,16 +273,16 @@ func (m *OAuth) innerDialogContent() string {
273273 )
274274
275275 link := linkStyle.Hyperlink(m.verificationURL, "id=oauth-verify").Render(m.verificationURL)
276− url := mutedStyle.
276+ url := statusTextStyle.
277277 Margin(0, 1).
278278 Width(m.width - 2).
279− Render("Browser not opening? Refer to\n" + link)
279+ Render("Browser not opening? Pay a visit to:\n" + link)
280280
281281 waiting := lipgloss.NewStyle().
282282 Margin(0, 1).
283283 Width(m.width - 2).
284284 Render(
285− greenStyle.Render(m.spinner.View()) + mutedStyle.Render("Verifying..."),
285+ successStyle.Render(m.spinner.View()) + statusTextStyle.Render("Verifying..."),
286286 )
287287
288288 return lipgloss.JoinVertical(
@@ -299,7 +299,7 @@ func (m *OAuth) innerDialogContent() string {
299299 )
300300
301301 case OAuthStateSuccess:
302− return greenStyle.
302+ return successStyle.
303303 Margin(1).
304304 Width(m.width - 2).
305305 Render("Authentication successful!")
internal/ui/logo/logo.go+12−4
@@ -148,10 +148,18 @@ func Render(base lipgloss.Style, version string, compact bool, o Opts) string {
148148
149149// SmallRender renders a smaller version of the Crush logo, suitable for
150150// smaller windows or sidebar usage.
151−func SmallRender(t *styles.Styles, width int) string {
152− title := t.Logo.SmallCharm.Render("Charm™")
153− title = fmt.Sprintf("%s %s", title, styles.ApplyBoldForegroundGrad(t.Logo.GradCanvas, "Crush", t.Logo.SmallGradFromColor, t.Logo.SmallGradToColor))
154− remainingWidth := width - lipgloss.Width(title) - 1 // 1 for the space after "Crush"
151+func SmallRender(t *styles.Styles, width int, o Opts) string {
152+ name := "Crush"
153+ if o.Hyper {
154+ name = "HYPERCRUSH"
155+ }
156+ charm := "Charm™"
157+ if !o.Hyper {
158+ charm = " " + charm
159+ }
160+ title := t.Logo.SmallCharm.Render(charm)
161+ title = fmt.Sprintf("%s %s", title, styles.ApplyBoldForegroundGrad(t.Logo.GradCanvas, name, t.Logo.SmallGradFromColor, t.Logo.SmallGradToColor))
162+ remainingWidth := width - lipgloss.Width(title) - 1 // 1 for the space after the name
155163 if remainingWidth > 0 {
156164 lines := strings.Repeat("╱", remainingWidth)
157165 title = fmt.Sprintf("%s %s", title, t.Logo.SmallDiagonals.Render(lines))
internal/ui/model/chat.go+12
@@ -107,6 +107,18 @@ func (m *Chat) Len() int {
107107 return m.list.Len()
108108}
109109
110+// InvalidateRenderCaches drops cached rendered output on every message
111+// item so the next draw re-renders with the current styles.
112+func (m *Chat) InvalidateRenderCaches() {
113+ items := make([]chat.MessageItem, 0, m.list.Len())
114+ for i := range m.list.Len() {
115+ if item, ok := m.list.ItemAt(i).(chat.MessageItem); ok {
116+ items = append(items, item)
117+ }
118+ }
119+ chat.ClearItemCaches(items)
120+}
121+
110122// SetMessages sets the chat messages to the provided list of message items.
111123func (m *Chat) SetMessages(msgs ...chat.MessageItem) {
112124 m.idInxMap = make(map[string]int)
internal/ui/model/header.go+30−4
@@ -37,12 +37,30 @@ func newHeader(com *common.Common) *header {
3737 h := &header{
3838 com: com,
3939 }
40− t := com.Styles
41− h.compactLogo = t.Header.Charm.Render("Charm™") + " " +
42− styles.ApplyBoldForegroundGrad(t.Header.LogoGradCanvas, "CRUSH", t.Header.LogoGradFromColor, t.Header.LogoGradToColor) + " "
40+ h.refresh()
4341 return h
4442}
4543
44+// refresh rebuilds cached logo strings using the current styles. Call
45+// after the theme changes.
46+func (h *header) refresh() {
47+ t := h.com.Styles
48+ isHyper := h.com.IsHyper()
49+ charm := "Charm™"
50+ if !isHyper {
51+ charm = " " + charm
52+ }
53+ name := "CRUSH"
54+ if isHyper {
55+ name = "HYPERCRUSH"
56+ }
57+ h.compactLogo = t.Header.Charm.Render(charm) + " " +
58+ styles.ApplyBoldForegroundGrad(t.Header.LogoGradCanvas, name, t.Header.LogoGradFromColor, t.Header.LogoGradToColor) + " "
59+ // Force drawHeader to re-render the wide logo on the next frame.
60+ h.width = 0
61+ h.logo = ""
62+}
63+
4664// drawHeader draws the header for the given session.
4765func (h *header) drawHeader(
4866 scr uv.Screen,
@@ -51,10 +69,11 @@ func (h *header) drawHeader(
5169 compact bool,
5270 detailsOpen bool,
5371 width int,
72+ hyperCredits *int,
5473) {
5574 t := h.com.Styles
5675 if width != h.width || compact != h.compact {
57− h.logo = renderLogo(h.com.Styles, compact, width)
76+ h.logo = renderLogo(h.com.Styles, compact, h.com.IsHyper(), width)
5877 }
5978
6079 h.width = width
@@ -83,6 +102,7 @@ func (h *header) drawHeader(
83102 lspErrorCount,
84103 detailsOpen,
85104 availDetailWidth,
105+ hyperCredits,
86106 )
87107
88108 remainingWidth := width -
@@ -113,6 +133,7 @@ func renderHeaderDetails(
113133 lspErrorCount int,
114134 detailsOpen bool,
115135 availWidth int,
136+ hyperCredits *int,
116137) string {
117138 t := com.Styles
118139
@@ -130,6 +151,11 @@ func renderHeaderDetails(
130151 parts = append(parts, formattedPercentage)
131152 }
132153
154+ if com.IsHyper() && hyperCredits != nil {
155+ hc := t.Header.Hypercredit.Render(styles.HypercreditIcon) + " " + t.Header.Percentage.Render(common.FormatCredits(*hyperCredits))
156+ parts = append(parts, hc)
157+ }
158+
133159 const keystroke = "ctrl+d"
134160 if detailsOpen {
135161 parts = append(parts, t.Header.Keystroke.Render(keystroke)+t.Header.KeystrokeTip.Render(" close"))
internal/ui/model/sidebar.go+4−2
@@ -53,7 +53,7 @@ func (m *UI) modelInfo(width int) string {
5353 if model != nil {
5454 modelName = model.CatwalkCfg.Name
5555 }
56− return common.ModelInfo(m.com.Styles, modelName, providerName, reasoningInfo, modelContext, width)
56+ return common.ModelInfo(m.com.Styles, modelName, providerName, reasoningInfo, modelContext, width, m.hyperCredits)
5757}
5858
5959// getDynamicHeightLimits will give us the num of items to show in each section based on the height
@@ -142,7 +142,9 @@ func (m *UI) drawSidebar(scr uv.Screen, area uv.Rectangle) {
142142 cwd := common.PrettyPath(t, m.com.Workspace.WorkingDir(), width)
143143 sidebarLogo := m.sidebarLogo
144144 if height < logoHeightBreakpoint {
145− sidebarLogo = logo.SmallRender(m.com.Styles, width)
145+ sidebarLogo = logo.SmallRender(m.com.Styles, width, logo.Opts{
146+ Hyper: m.com.IsHyper(),
147+ })
146148 }
147149 blocks := []string{
148150 sidebarLogo,
internal/ui/model/status.go+6−4
@@ -101,11 +101,13 @@ func (s *Status) Draw(scr uv.Screen, area uv.Rectangle) {
101101
102102 ind := indStyle.String()
103103 indWidth := lipgloss.Width(ind)
104+ msgPad := msgStyle.GetPaddingLeft() + msgStyle.GetPaddingRight()
105+ avail := max(0, area.Dx()-indWidth-msgPad)
104106 msg := strings.Join(strings.Split(s.msg.Msg, "\n"), " ")
105− msgWidth := lipgloss.Width(msg)
106− msg = ansi.Truncate(msg, area.Dx()-indWidth-msgWidth, "…")
107− padWidth := max(0, area.Dx()-indWidth-msgWidth)
108− msg += strings.Repeat(" ", padWidth)
107+ msg = ansi.Truncate(msg, avail, "…")
108+ if w := lipgloss.Width(msg); w < avail {
109+ msg += strings.Repeat(" ", avail-w)
110+ }
109111 info := msgStyle.Render(msg)
110112
111113 // Draw the info message over the help view
internal/ui/model/ui.go+212−65
@@ -25,6 +25,7 @@ import (
2525 tea "charm.land/bubbletea/v2"
2626 "charm.land/catwalk/pkg/catwalk"
2727 "charm.land/lipgloss/v2"
28+ "github.com/charmbracelet/crush/internal/agent/hyper"
2829 "github.com/charmbracelet/crush/internal/agent/notify"
2930 agenttools "github.com/charmbracelet/crush/internal/agent/tools"
3031 "github.com/charmbracelet/crush/internal/agent/tools/mcp"
@@ -137,6 +138,13 @@ type (
137138 // closeDialogMsg is sent to close the current dialog.
138139 closeDialogMsg struct{}
139140
141+ // hyperRefreshDoneMsg is sent after a silent Hyper OAuth refresh
142+ // finishes. It carries the original model-selection action so the
143+ // selection can be resumed.
144+ hyperRefreshDoneMsg struct {
145+ action dialog.ActionSelectModel
146+ }
147+
140148 // copyChatHighlightMsg is sent to copy the current chat highlight to clipboard.
141149 copyChatHighlightMsg struct{}
142150
@@ -144,6 +152,11 @@ type (
144152 sessionFilesUpdatesMsg struct {
145153 sessionFiles []SessionFile
146154 }
155+ // creditsUpdatedMsg is sent when the remaining Hyper credits have been
156+ // fetched from the API.
157+ creditsUpdatedMsg struct {
158+ credits int
159+ }
147160)
148161
149162// UI represents the main user interface model.
@@ -257,6 +270,9 @@ type UI struct {
257270 // mouse highlighting related state
258271 lastClickTime time.Time
259272
273+ // hyperCredits is the remaining Hyper credits, updated after each prompt.
274+ hyperCredits *int
275+
260276 // Prompt history for up/down navigation through previous messages.
261277 promptHistory struct {
262278 messages []string
@@ -331,7 +347,7 @@ func New(com *common.Common, initialSessionID string, continueLast bool) *UI {
331347
332348 status := NewStatus(com, ui)
333349
334− ui.setEditorPrompt(false)
350+ ui.setEditorPrompt(com.Workspace.PermissionSkipRequests())
335351 ui.randomizePlaceholders()
336352 ui.textarea.Placeholder = ui.readyPlaceholder
337353 ui.status = status
@@ -379,6 +395,9 @@ func (m *UI) Init() tea.Cmd {
379395 if cmd := m.loadInitialSession(); cmd != nil {
380396 cmds = append(cmds, cmd)
381397 }
398+ if m.com.IsHyper() {
399+ cmds = append(cmds, m.fetchHyperCredits())
400+ }
382401 return tea.Batch(cmds...)
383402}
384403
@@ -843,6 +862,12 @@ func (m *UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
843862 m.textarea.SetValue(msg.Text)
844863 m.textarea.MoveToEnd()
845864 cmds = append(cmds, m.updateTextareaWithPrevHeight(msg, prevHeight))
865+ case hyperRefreshDoneMsg:
866+ if cmd := m.handleSelectModel(msg.action); cmd != nil {
867+ cmds = append(cmds, cmd)
868+ }
869+ case creditsUpdatedMsg:
870+ m.hyperCredits = &msg.credits
846871 case util.InfoMsg:
847872 if msg.Type == util.InfoTypeError {
848873 slog.Error("Error reported", "error", msg.Msg)
@@ -853,6 +878,18 @@ func (m *UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
853878 ttl = DefaultStatusTTL
854879 }
855880 cmds = append(cmds, clearInfoMsgCmd(ttl))
881+ case app.UpdateAvailableMsg:
882+ text := fmt.Sprintf("Crush update available: v%s → v%s.", msg.CurrentVersion, msg.LatestVersion)
883+ if msg.IsDevelopment {
884+ text = fmt.Sprintf("This is a development version of Crush. The latest version is v%s.", msg.LatestVersion)
885+ }
886+ ttl := 10 * time.Second
887+ m.status.SetInfoMsg(util.InfoMsg{
888+ Type: util.InfoTypeUpdate,
889+ Msg: text,
890+ TTL: ttl,
891+ })
892+ cmds = append(cmds, clearInfoMsgCmd(ttl))
856893 case util.ClearStatusMsg:
857894 m.status.ClearInfoMsg()
858895 case completions.CompletionItemsLoadedMsg:
@@ -1429,66 +1466,8 @@ func (m *UI) handleDialogMsg(msg tea.Msg) tea.Cmd {
14291466 m.dialog.CloseDialog(dialog.CommandsID)
14301467
14311468 case dialog.ActionSelectModel:
1432− if m.isAgentBusy() {
1433− cmds = append(cmds, util.ReportWarn("Agent is busy, please wait..."))
1434− break
1435− }
1436−
1437− cfg := m.com.Config()
1438− if cfg == nil {
1439− cmds = append(cmds, util.ReportError(errors.New("configuration not found")))
1440− break
1441− }
1442−
1443− var (
1444− providerID = msg.Model.Provider
1445− isCopilot = providerID == string(catwalk.InferenceProviderCopilot)
1446− isConfigured = func() bool { _, ok := cfg.Providers.Get(providerID); return ok }
1447− )
1448−
1449− // Attempt to import GitHub Copilot tokens from VSCode if available.
1450− if isCopilot && !isConfigured() && !msg.ReAuthenticate {
1451− m.com.Workspace.ImportCopilot()
1452− }
1453−
1454− if !isConfigured() || msg.ReAuthenticate {
1455− m.dialog.CloseDialog(dialog.ModelsID)
1456− if cmd := m.openAuthenticationDialog(msg.Provider, msg.Model, msg.ModelType); cmd != nil {
1457− cmds = append(cmds, cmd)
1458− }
1459− break
1460− }
1461−
1462− if err := m.com.Workspace.UpdatePreferredModel(config.ScopeGlobal, msg.ModelType, msg.Model); err != nil {
1463− cmds = append(cmds, util.ReportError(err))
1464− } else if _, ok := cfg.Models[config.SelectedModelTypeSmall]; !ok {
1465− // Ensure small model is set is unset.
1466− smallModel := m.com.Workspace.GetDefaultSmallModel(providerID)
1467− if err := m.com.Workspace.UpdatePreferredModel(config.ScopeGlobal, config.SelectedModelTypeSmall, smallModel); err != nil {
1468− cmds = append(cmds, util.ReportError(err))
1469− }
1470− }
1471−
1472− cmds = append(cmds, func() tea.Msg {
1473− if err := m.com.Workspace.UpdateAgentModel(context.TODO()); err != nil {
1474− return util.ReportError(err)
1475− }
1476−
1477− modelMsg := fmt.Sprintf("%s model changed to %s", msg.ModelType, msg.Model.Model)
1478−
1479− return util.NewInfoMsg(modelMsg)
1480− })
1481−
1482− m.dialog.CloseDialog(dialog.APIKeyInputID)
1483− m.dialog.CloseDialog(dialog.OAuthID)
1484− m.dialog.CloseDialog(dialog.ModelsID)
1485−
1486− if isOnboarding {
1487− m.setState(uiLanding, uiFocusEditor)
1488− m.com.Config().SetupAgents()
1489− if err := m.com.Workspace.InitCoderAgent(context.TODO()); err != nil {
1490− cmds = append(cmds, util.ReportError(err))
1491− }
1469+ if cmd := m.handleSelectModel(msg); cmd != nil {
1470+ cmds = append(cmds, cmd)
14921471 }
14931472 case dialog.ActionSelectReasoningEffort:
14941473 if m.isAgentBusy() {
@@ -1594,6 +1573,137 @@ func substituteArgs(content string, args map[string]string) string {
15941573 return content
15951574}
15961575
1576+// refreshHyperAndRetrySelect returns a command that silently refreshes
1577+// the Hyper OAuth token and then re-runs the model selection. If the
1578+// refresh fails, the selection resumes with ReAuthenticate set so the
1579+// OAuth dialog opens.
1580+func (m *UI) refreshHyperAndRetrySelect(msg dialog.ActionSelectModel) tea.Cmd {
1581+ return func() tea.Msg {
1582+ ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
1583+ defer cancel()
1584+ if err := m.com.Workspace.RefreshOAuthToken(ctx, config.ScopeGlobal, "hyper"); err != nil {
1585+ slog.Warn("Hyper OAuth refresh failed, requesting re-auth", "error", err)
1586+ msg.ReAuthenticate = true
1587+ }
1588+ return hyperRefreshDoneMsg{action: msg}
1589+ }
1590+}
1591+
1592+// fetchHyperCredits returns a command that asynchronously fetches the
1593+// remaining Hyper credits from the API.
1594+func (m *UI) fetchHyperCredits() tea.Cmd {
1595+ return func() tea.Msg {
1596+ cfg := m.com.Config()
1597+ if cfg == nil {
1598+ return nil
1599+ }
1600+ providerCfg, ok := cfg.Providers.Get(hyper.Name)
1601+ if !ok {
1602+ return nil
1603+ }
1604+ apiKey, err := m.com.Workspace.Resolver().ResolveValue(providerCfg.APIKey)
1605+ if err != nil || apiKey == "" {
1606+ return nil
1607+ }
1608+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
1609+ defer cancel()
1610+ credits, err := hyper.FetchCredits(ctx, apiKey)
1611+ if err != nil {
1612+ slog.Error("Failed to fetch Hyper credits", "error", err)
1613+ return nil
1614+ }
1615+ return creditsUpdatedMsg{credits: credits}
1616+ }
1617+}
1618+
1619+// handleSelectModel performs the model selection after any provider
1620+// pre-checks (such as a silent Hyper OAuth refresh) have completed.
1621+func (m *UI) handleSelectModel(msg dialog.ActionSelectModel) tea.Cmd {
1622+ var cmds []tea.Cmd
1623+
1624+ if m.isAgentBusy() {
1625+ return util.ReportWarn("Agent is busy, please wait...")
1626+ }
1627+
1628+ cfg := m.com.Config()
1629+ if cfg == nil {
1630+ return util.ReportError(errors.New("configuration not found"))
1631+ }
1632+
1633+ var (
1634+ providerID = msg.Model.Provider
1635+ isCopilot = providerID == string(catwalk.InferenceProviderCopilot)
1636+ isConfigured = func() bool { _, ok := cfg.Providers.Get(providerID); return ok }
1637+ isOnboarding = m.state == uiOnboarding
1638+ )
1639+
1640+ // For Hyper, if the stored OAuth token is expired, try a silent
1641+ // refresh before deciding whether the provider is configured. Keeps
1642+ // users from hitting a 401 on their first message after the
1643+ // short-lived access token ages out.
1644+ if !msg.ReAuthenticate && providerID == "hyper" {
1645+ if pc, ok := cfg.Providers.Get(providerID); ok && pc.OAuthToken != nil && pc.OAuthToken.IsExpired() {
1646+ return m.refreshHyperAndRetrySelect(msg)
1647+ }
1648+ }
1649+
1650+ // Attempt to import GitHub Copilot tokens from VSCode if available.
1651+ if isCopilot && !isConfigured() && !msg.ReAuthenticate {
1652+ m.com.Workspace.ImportCopilot()
1653+ }
1654+
1655+ if !isConfigured() || msg.ReAuthenticate {
1656+ m.dialog.CloseDialog(dialog.ModelsID)
1657+ if cmd := m.openAuthenticationDialog(msg.Provider, msg.Model, msg.ModelType); cmd != nil {
1658+ cmds = append(cmds, cmd)
1659+ }
1660+ return tea.Batch(cmds...)
1661+ }
1662+
1663+ if err := m.com.Workspace.UpdatePreferredModel(config.ScopeGlobal, msg.ModelType, msg.Model); err != nil {
1664+ cmds = append(cmds, util.ReportError(err))
1665+ } else {
1666+ if msg.ModelType == config.SelectedModelTypeLarge {
1667+ // Swap the theme live based on the newly selected large
1668+ // model's provider.
1669+ m.applyTheme(styles.ThemeForProvider(providerID))
1670+ }
1671+ if _, ok := cfg.Models[config.SelectedModelTypeSmall]; !ok {
1672+ // Ensure small model is set is unset.
1673+ smallModel := m.com.Workspace.GetDefaultSmallModel(providerID)
1674+ if err := m.com.Workspace.UpdatePreferredModel(config.ScopeGlobal, config.SelectedModelTypeSmall, smallModel); err != nil {
1675+ cmds = append(cmds, util.ReportError(err))
1676+ }
1677+ }
1678+ }
1679+
1680+ cmds = append(cmds, func() tea.Msg {
1681+ if err := m.com.Workspace.UpdateAgentModel(context.TODO()); err != nil {
1682+ return util.ReportError(err)
1683+ }
1684+
1685+ modelMsg := fmt.Sprintf("%s model changed to %s", msg.ModelType, msg.Model.Model)
1686+
1687+ return util.NewInfoMsg(modelMsg)
1688+ })
1689+
1690+ m.dialog.CloseDialog(dialog.APIKeyInputID)
1691+ m.dialog.CloseDialog(dialog.OAuthID)
1692+ m.dialog.CloseDialog(dialog.ModelsID)
1693+
1694+ if isOnboarding {
1695+ m.setState(uiLanding, uiFocusEditor)
1696+ m.com.Config().SetupAgents()
1697+ if err := m.com.Workspace.InitCoderAgent(context.TODO()); err != nil {
1698+ cmds = append(cmds, util.ReportError(err))
1699+ }
1700+ } else if m.com.IsHyper() {
1701+ cmds = append(cmds, m.fetchHyperCredits())
1702+ }
1703+
1704+ return tea.Batch(cmds...)
1705+}
1706+
15971707func (m *UI) openAuthenticationDialog(provider catwalk.Provider, model config.SelectedModel, modelType config.SelectedModelType) tea.Cmd {
15981708 var (
15991709 dlg dialog.Dialog
@@ -1999,6 +2109,7 @@ func (m *UI) drawHeader(scr uv.Screen, area uv.Rectangle) {
19992109 m.isCompact,
20002110 m.detailsOpen,
20012111 area.Dx(),
2112+ m.hyperCredits,
20022113 )
20032114}
20042115
@@ -2977,7 +3088,37 @@ func (m *UI) renderEditorView(width int) string {
29773088
29783089// cacheSidebarLogo renders and caches the sidebar logo at the specified width.
29793090func (m *UI) cacheSidebarLogo(width int) {
2980− m.sidebarLogo = renderLogo(m.com.Styles, true, width)
3091+ m.sidebarLogo = renderLogo(m.com.Styles, true, m.com.IsHyper(), width)
3092+}
3093+
3094+// applyTheme replaces the active styles with the given theme, drops the
3095+// shared markdown renderer cache, and refreshes every component that
3096+// caches style data.
3097+func (m *UI) applyTheme(s styles.Styles) {
3098+ *m.com.Styles = s
3099+ common.InvalidateMarkdownRendererCache()
3100+ m.refreshStyles()
3101+}
3102+
3103+// refreshStyles pushes the current *m.com.Styles into every subcomponent
3104+// that copies or pre-renders style-dependent values at construction time.
3105+func (m *UI) refreshStyles() {
3106+ t := m.com.Styles
3107+ m.header.refresh()
3108+ if m.layout.sidebar.Dx() > 0 {
3109+ m.cacheSidebarLogo(m.layout.sidebar.Dx())
3110+ }
3111+ m.textarea.SetStyles(t.Editor.Textarea)
3112+ m.completions.SetStyles(t.Completions.Normal, t.Completions.Focused, t.Completions.Match)
3113+ m.attachments.Renderer().SetStyles(
3114+ t.Attachments.Normal,
3115+ t.Attachments.Deleting,
3116+ t.Attachments.Image,
3117+ t.Attachments.Text,
3118+ )
3119+ m.todoSpinner.Style = t.Pills.TodoSpinner
3120+ m.status.help.Styles = t.Help
3121+ m.chat.InvalidateRenderCaches()
29813122}
29823123
29833124// sendMessage sends a message with the given content and attachments.
@@ -3257,10 +3398,15 @@ func (m *UI) handlePermissionNotification(notification permission.PermissionNoti
32573398func (m *UI) handleAgentNotification(n notify.Notification) tea.Cmd {
32583399 switch n.Type {
32593400 case notify.TypeAgentFinished:
3260− return m.sendNotification(notification.Notification{
3401+ var cmds []tea.Cmd
3402+ cmds = append(cmds, m.sendNotification(notification.Notification{
32613403 Title: "Crush is waiting...",
32623404 Message: fmt.Sprintf("Agent's turn completed in \"%s\"", n.SessionTitle),
3263− })
3405+ }))
3406+ if m.com.IsHyper() {
3407+ cmds = append(cmds, m.fetchHyperCredits())
3408+ }
3409+ return tea.Batch(cmds...)
32643410 case notify.TypeReAuthenticate:
32653411 return m.handleReAuthenticate(n.ProviderID)
32663412 default:
@@ -3656,7 +3802,7 @@ func (m *UI) disableDockerMCP() tea.Msg {
36563802}
36573803
36583804// renderLogo renders the Crush logo with the given styles and dimensions.
3659−func renderLogo(t *styles.Styles, compact bool, width int) string {
3805+func renderLogo(t *styles.Styles, compact, hyper bool, width int) string {
36603806 return logo.Render(t.Logo.GradCanvas, version.Version, compact, logo.Opts{
36613807 FieldColor: t.Logo.FieldColor,
36623808 TitleColorA: t.Logo.TitleColorA,
@@ -3664,5 +3810,6 @@ func renderLogo(t *styles.Styles, compact bool, width int) string {
36643810 CharmColor: t.Logo.CharmColor,
36653811 VersionColor: t.Logo.VersionColor,
36663812 Width: width,
3813+ Hyper: hyper,
36673814 })
36683815}
internal/ui/styles/quickstyle.go+338−359
@@ -14,119 +14,83 @@ import (
1414 "github.com/charmbracelet/x/exp/charmtone"
1515)
1616
17−// quickStyleOpts is the palette of colors used by quickStyle to build a
18−// complete Styles value. Each field maps to a semantic role in the UI.
17+// quickStyleOpts is the palette of colors used by quickStyle to simplify the
18+// process of building a theme.
1919type quickStyleOpts struct {
2020 // Brand.
2121 primary color.Color
2222 secondary color.Color
23− tertiary color.Color
23+ accent color.Color
24+ keyword color.Color
2425
25− // Foregrounds.
26− fgBase color.Color
27− fgMuted color.Color
28− fgHalfMuted color.Color
29− fgSubtle color.Color
26+ // Default foreground and background colors.
27+ fgBase color.Color
28+ bgBase color.Color
29+
30+ // Low-contrast dividers, separators, and rule lines.
31+ separator color.Color
32+
33+ fgSubtle color.Color
34+ fgMoreSubtle color.Color
35+ fgMostSubtle color.Color
3036
3137 // Contrast pairings: foregrounds designed to sit on top of a
3238 // matching background role.
3339 onPrimary color.Color // foreground on primary backgrounds.
34− onAccent color.Color // foreground on saturated status/accent backgrounds.
35−
36− // Backgrounds.
37− bgBase color.Color
38− bgBaseLighter color.Color
39− bgSubtle color.Color
40− bgOverlay color.Color
41−
42− // Borders.
43− border color.Color
44− borderFocus color.Color
45−
46− // Status.
47− danger color.Color
48− error color.Color
49− warning color.Color
50− warningStrong color.Color
51− busy color.Color
52− info color.Color
53− infoSubtle color.Color
54− infoMuted color.Color
55− success color.Color
56− successSubtle color.Color
57− successMuted color.Color
40+
41+ bgMostVisible color.Color
42+ bgLessVisible color.Color
43+ bgLeastVisible color.Color
44+
45+ // Statuses.
46+ destructive color.Color
47+ error color.Color
48+ warning color.Color
49+ warningSubtle color.Color
50+ busy color.Color
51+ info color.Color
52+ infoMoreSubtle color.Color
53+ infoMostSubtle color.Color
54+ success color.Color
55+ successMoreSubtle color.Color
56+ successMostSubtle color.Color
5857}
5958
60−// quickStyle builds a complete Styles value from a palette of semantic
61−// colors. Themes should populate quickStyleOpts and call this rather than
62−// re-implementing every style rule.
59+// quickStyle builds the default Styles (that is, the default theme, Charmtone
60+// Pantera) from a palette of semi-semanticly-named colors.
6361//
64−// The idea here is that you can do most of the work with quickStyle, then
65−// add overrides as needed.
62+// The idea here is that you can do most of the work on a theme with quickStyle,
63+// then add overrides as needed.
6664func quickStyle(o quickStyleOpts) Styles {
6765 var (
68− primary = o.primary
69− secondary = o.secondary
70− tertiary = o.tertiary
71−
72− fgBase = o.fgBase
73− fgMuted = o.fgMuted
74− fgHalfMuted = o.fgHalfMuted
75− fgSubtle = o.fgSubtle
76−
77− onPrimary = o.onPrimary
78− onAccent = o.onAccent
79−
80− bgBase = o.bgBase
81− bgBaseLighter = o.bgBaseLighter
82− bgSubtle = o.bgSubtle
83− bgOverlay = o.bgOverlay
84−
85− border = o.border
86− borderFocus = o.borderFocus
87−
88− danger = o.danger
89− error = o.error
90− warning = o.warning
91− warningStrong = o.warningStrong
92− busy = o.busy
93− info = o.info
94− infoSubtle = o.infoSubtle
95− infoMuted = o.infoMuted
96− success = o.success
97− successSubtle = o.successSubtle
98− successMuted = o.successMuted
99− )
100−
101− var (
102− base = lipgloss.NewStyle().Foreground(fgBase)
103− muted = lipgloss.NewStyle().Foreground(fgMuted)
104− subtle = lipgloss.NewStyle().Foreground(fgSubtle)
66+ base = lipgloss.NewStyle().Foreground(o.fgBase)
67+ muted = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
68+ subtle = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
10569 s Styles
10670 )
10771
108− s.Background = bgBase
72+ s.Background = o.bgBase
10973
11074 // Populate color fields
111− s.WorkingGradFromColor = primary
112− s.WorkingGradToColor = secondary
113− s.WorkingLabelColor = fgBase
75+ s.WorkingGradFromColor = o.primary
76+ s.WorkingGradToColor = o.secondary
77+ s.WorkingLabelColor = o.fgBase
11478
11579 s.TextInput = textinput.Styles{
11680 Focused: textinput.StyleState{
11781 Text: base,
118− Placeholder: base.Foreground(fgSubtle),
119− Prompt: base.Foreground(tertiary),
120− Suggestion: base.Foreground(fgSubtle),
82+ Placeholder: base.Foreground(o.fgMostSubtle),
83+ Prompt: base.Foreground(o.accent),
84+ Suggestion: base.Foreground(o.fgMostSubtle),
12185 },
12286 Blurred: textinput.StyleState{
123− Text: base.Foreground(fgMuted),
124− Placeholder: base.Foreground(fgSubtle),
125− Prompt: base.Foreground(fgMuted),
126− Suggestion: base.Foreground(fgSubtle),
87+ Text: base.Foreground(o.fgMoreSubtle),
88+ Placeholder: base.Foreground(o.fgMostSubtle),
89+ Prompt: base.Foreground(o.fgMoreSubtle),
90+ Suggestion: base.Foreground(o.fgMostSubtle),
12791 },
12892 Cursor: textinput.CursorStyle{
129− Color: secondary,
93+ Color: o.secondary,
13094 Shape: tea.CursorBlock,
13195 Blink: true,
13296 },
@@ -136,23 +100,23 @@ func quickStyle(o quickStyleOpts) Styles {
136100 Focused: textarea.StyleState{
137101 Base: base,
138102 Text: base,
139− LineNumber: base.Foreground(fgSubtle),
103+ LineNumber: base.Foreground(o.fgMostSubtle),
140104 CursorLine: base,
141− CursorLineNumber: base.Foreground(fgSubtle),
142− Placeholder: base.Foreground(fgSubtle),
143− Prompt: base.Foreground(tertiary),
105+ CursorLineNumber: base.Foreground(o.fgMostSubtle),
106+ Placeholder: base.Foreground(o.fgMostSubtle),
107+ Prompt: base.Foreground(o.accent),
144108 },
145109 Blurred: textarea.StyleState{
146110 Base: base,
147− Text: base.Foreground(fgMuted),
148− LineNumber: base.Foreground(fgMuted),
111+ Text: base.Foreground(o.fgMoreSubtle),
112+ LineNumber: base.Foreground(o.fgMoreSubtle),
149113 CursorLine: base,
150− CursorLineNumber: base.Foreground(fgMuted),
151− Placeholder: base.Foreground(fgSubtle),
152− Prompt: base.Foreground(fgMuted),
114+ CursorLineNumber: base.Foreground(o.fgMoreSubtle),
115+ Placeholder: base.Foreground(o.fgMostSubtle),
116+ Prompt: base.Foreground(o.fgMoreSubtle),
153117 },
154118 Cursor: textarea.CursorStyle{
155− Color: secondary,
119+ Color: o.secondary,
156120 Shape: tea.CursorBlock,
157121 Blink: true,
158122 },
@@ -163,7 +127,7 @@ func quickStyle(o quickStyleOpts) Styles {
163127 StylePrimitive: ansi.StylePrimitive{
164128 // BlockPrefix: "\n",
165129 // BlockSuffix: "\n",
166− Color: hex(fgHalfMuted),
130+ Color: hex(o.fgSubtle),
167131 },
168132 // Margin: new(uint(defaultMargin)),
169133 },
@@ -178,7 +142,7 @@ func quickStyle(o quickStyleOpts) Styles {
178142 Heading: ansi.StyleBlock{
179143 StylePrimitive: ansi.StylePrimitive{
180144 BlockSuffix: "\n",
181− Color: hex(info),
145+ Color: hex(o.info),
182146 Bold: new(true),
183147 },
184148 },
@@ -186,8 +150,8 @@ func quickStyle(o quickStyleOpts) Styles {
186150 StylePrimitive: ansi.StylePrimitive{
187151 Prefix: " ",
188152 Suffix: " ",
189− Color: hex(warning),
190− BackgroundColor: hex(primary),
153+ Color: hex(o.warningSubtle),
154+ BackgroundColor: hex(o.primary),
191155 Bold: new(true),
192156 },
193157 },
@@ -214,7 +178,7 @@ func quickStyle(o quickStyleOpts) Styles {
214178 H6: ansi.StyleBlock{
215179 StylePrimitive: ansi.StylePrimitive{
216180 Prefix: "###### ",
217− Color: hex(successMuted),
181+ Color: hex(o.successMostSubtle),
218182 Bold: new(false),
219183 },
220184 },
@@ -228,7 +192,7 @@ func quickStyle(o quickStyleOpts) Styles {
228192 Bold: new(true),
229193 },
230194 HorizontalRule: ansi.StylePrimitive{
231− Color: hex(border),
195+ Color: hex(o.separator),
232196 Format: "\n--------\n",
233197 },
234198 Item: ansi.StylePrimitive{
@@ -247,7 +211,7 @@ func quickStyle(o quickStyleOpts) Styles {
247211 Underline: new(true),
248212 },
249213 LinkText: ansi.StylePrimitive{
250− Color: hex(successMuted),
214+ Color: hex(o.successMostSubtle),
251215 Bold: new(true),
252216 },
253217 Image: ansi.StylePrimitive{
@@ -255,40 +219,40 @@ func quickStyle(o quickStyleOpts) Styles {
255219 Underline: new(true),
256220 },
257221 ImageText: ansi.StylePrimitive{
258− Color: hex(fgMuted),
222+ Color: hex(o.fgMoreSubtle),
259223 Format: "Image: {{.text}} →",
260224 },
261225 Code: ansi.StyleBlock{
262226 StylePrimitive: ansi.StylePrimitive{
263227 Prefix: " ",
264228 Suffix: " ",
265− Color: hex(danger),
266− BackgroundColor: hex(bgSubtle),
229+ Color: hex(o.destructive),
230+ BackgroundColor: hex(o.bgLessVisible),
267231 },
268232 },
269233 CodeBlock: ansi.StyleCodeBlock{
270234 StyleBlock: ansi.StyleBlock{
271235 StylePrimitive: ansi.StylePrimitive{
272− Color: hex(bgSubtle),
236+ Color: hex(o.bgLessVisible),
273237 },
274238 Margin: new(uint(defaultMargin)),
275239 },
276240 Chroma: &ansi.Chroma{
277241 Text: ansi.StylePrimitive{
278− Color: hex(fgHalfMuted),
242+ Color: hex(o.fgSubtle),
279243 },
280244 Error: ansi.StylePrimitive{
281− Color: hex(onAccent),
282− BackgroundColor: hex(error),
245+ Color: hex(o.onPrimary),
246+ BackgroundColor: hex(o.error),
283247 },
284248 Comment: ansi.StylePrimitive{
285− Color: hex(fgSubtle),
249+ Color: hex(o.fgMostSubtle),
286250 },
287251 CommentPreproc: ansi.StylePrimitive{
288252 Color: hex(charmtone.Bengal),
289253 },
290254 Keyword: ansi.StylePrimitive{
291− Color: hex(info),
255+ Color: hex(o.info),
292256 },
293257 KeywordReserved: ansi.StylePrimitive{
294258 Color: hex(charmtone.Pony),
@@ -303,10 +267,10 @@ func quickStyle(o quickStyleOpts) Styles {
303267 Color: hex(charmtone.Salmon),
304268 },
305269 Punctuation: ansi.StylePrimitive{
306− Color: hex(warning),
270+ Color: hex(o.warningSubtle),
307271 },
308272 Name: ansi.StylePrimitive{
309− Color: hex(fgHalfMuted),
273+ Color: hex(o.fgSubtle),
310274 },
311275 NameBuiltin: ansi.StylePrimitive{
312276 Color: hex(charmtone.Cheeky),
@@ -326,34 +290,34 @@ func quickStyle(o quickStyleOpts) Styles {
326290 Color: hex(charmtone.Citron),
327291 },
328292 NameFunction: ansi.StylePrimitive{
329− Color: hex(successMuted),
293+ Color: hex(o.successMostSubtle),
330294 },
331295 LiteralNumber: ansi.StylePrimitive{
332− Color: hex(success),
296+ Color: hex(o.success),
333297 },
334298 LiteralString: ansi.StylePrimitive{
335299 Color: hex(charmtone.Cumin),
336300 },
337301 LiteralStringEscape: ansi.StylePrimitive{
338− Color: hex(successSubtle),
302+ Color: hex(o.successMoreSubtle),
339303 },
340304 GenericDeleted: ansi.StylePrimitive{
341− Color: hex(danger),
305+ Color: hex(o.destructive),
342306 },
343307 GenericEmph: ansi.StylePrimitive{
344308 Italic: new(true),
345309 },
346310 GenericInserted: ansi.StylePrimitive{
347− Color: hex(successMuted),
311+ Color: hex(o.successMostSubtle),
348312 },
349313 GenericStrong: ansi.StylePrimitive{
350314 Bold: new(true),
351315 },
352316 GenericSubheading: ansi.StylePrimitive{
353− Color: hex(fgMuted),
317+ Color: hex(o.fgMoreSubtle),
354318 },
355319 Background: ansi.StylePrimitive{
356− BackgroundColor: hex(bgSubtle),
320+ BackgroundColor: hex(o.bgLessVisible),
357321 },
358322 },
359323 },
@@ -368,8 +332,8 @@ func quickStyle(o quickStyleOpts) Styles {
368332 }
369333
370334 // QuietMarkdown style - muted colors on subtle background for thinking content.
371− plainBg := hex(bgBaseLighter)
372− plainFg := hex(fgMuted)
335+ plainBg := hex(o.bgLeastVisible)
336+ plainFg := hex(o.fgMoreSubtle)
373337 s.QuietMarkdown = ansi.StyleConfig{
374338 Document: ansi.StyleBlock{
375339 StylePrimitive: ansi.StylePrimitive{
@@ -531,37 +495,37 @@ func quickStyle(o quickStyleOpts) Styles {
531495 }
532496
533497 s.Help = help.Styles{
534− ShortKey: base.Foreground(fgMuted),
535− ShortDesc: base.Foreground(fgSubtle),
536− ShortSeparator: base.Foreground(border),
537− Ellipsis: base.Foreground(border),
538− FullKey: base.Foreground(fgMuted),
539− FullDesc: base.Foreground(fgSubtle),
540− FullSeparator: base.Foreground(border),
498+ ShortKey: base.Foreground(o.fgMoreSubtle),
499+ ShortDesc: base.Foreground(o.fgMostSubtle),
500+ ShortSeparator: base.Foreground(o.separator),
501+ Ellipsis: base.Foreground(o.separator),
502+ FullKey: base.Foreground(o.fgMoreSubtle),
503+ FullDesc: base.Foreground(o.fgMostSubtle),
504+ FullSeparator: base.Foreground(o.separator),
541505 }
542506
543507 s.Diff = diffview.Style{
544508 DividerLine: diffview.LineStyle{
545509 LineNumber: lipgloss.NewStyle().
546− Foreground(fgHalfMuted).
547− Background(bgBaseLighter),
510+ Foreground(o.fgSubtle).
511+ Background(o.bgLeastVisible),
548512 Code: lipgloss.NewStyle().
549− Foreground(fgHalfMuted).
550− Background(bgBaseLighter),
513+ Foreground(o.fgSubtle).
514+ Background(o.bgLeastVisible),
551515 },
552516 MissingLine: diffview.LineStyle{
553517 LineNumber: lipgloss.NewStyle().
554− Background(bgBaseLighter),
518+ Background(o.bgLeastVisible),
555519 Code: lipgloss.NewStyle().
556− Background(bgBaseLighter),
520+ Background(o.bgLeastVisible),
557521 },
558522 EqualLine: diffview.LineStyle{
559523 LineNumber: lipgloss.NewStyle().
560− Foreground(fgMuted).
561− Background(bgBase),
524+ Foreground(o.fgMoreSubtle).
525+ Background(o.bgBase),
562526 Code: lipgloss.NewStyle().
563− Foreground(fgMuted).
564− Background(bgBase),
527+ Foreground(o.fgMoreSubtle).
528+ Background(o.bgBase),
565529 },
566530 InsertLine: diffview.LineStyle{
567531 LineNumber: lipgloss.NewStyle().
@@ -585,237 +549,252 @@ func quickStyle(o quickStyleOpts) Styles {
585549 },
586550 Filename: diffview.LineStyle{
587551 LineNumber: lipgloss.NewStyle().
588− Foreground(fgHalfMuted).
589− Background(bgBaseLighter),
552+ Foreground(o.fgSubtle).
553+ Background(o.bgLeastVisible),
590554 Code: lipgloss.NewStyle().
591− Foreground(fgHalfMuted).
592− Background(bgBaseLighter),
555+ Foreground(o.fgSubtle).
556+ Background(o.bgLeastVisible),
593557 },
594558 }
595559
596560 s.FilePicker = filepicker.Styles{
597− DisabledCursor: base.Foreground(fgMuted),
598− Cursor: base.Foreground(fgBase),
599− Symlink: base.Foreground(fgSubtle),
600− Directory: base.Foreground(primary),
601− File: base.Foreground(fgBase),
602− DisabledFile: base.Foreground(fgMuted),
603− DisabledSelected: base.Background(bgOverlay).Foreground(fgMuted),
604− Permission: base.Foreground(fgMuted),
605− Selected: base.Background(primary).Foreground(fgBase),
606− FileSize: base.Foreground(fgMuted),
607− EmptyDirectory: base.Foreground(fgMuted).PaddingLeft(2).SetString("Empty directory"),
561+ DisabledCursor: base.Foreground(o.fgMoreSubtle),
562+ Cursor: base.Foreground(o.fgBase),
563+ Symlink: base.Foreground(o.fgMostSubtle),
564+ Directory: base.Foreground(o.primary),
565+ File: base.Foreground(o.fgBase),
566+ DisabledFile: base.Foreground(o.fgMoreSubtle),
567+ DisabledSelected: base.Background(o.bgMostVisible).Foreground(o.fgMoreSubtle),
568+ Permission: base.Foreground(o.fgMoreSubtle),
569+ Selected: base.Background(o.primary).Foreground(o.fgBase),
570+ FileSize: base.Foreground(o.fgMoreSubtle),
571+ EmptyDirectory: base.Foreground(o.fgMoreSubtle).PaddingLeft(2).SetString("Empty directory"),
608572 }
609573
610574 // borders
611− s.ToolCallSuccess = lipgloss.NewStyle().Foreground(success).SetString(ToolSuccess)
575+ s.ToolCallSuccess = lipgloss.NewStyle().Foreground(o.success).SetString(ToolSuccess)
612576
613− s.Header.Charm = base.Foreground(secondary)
614− s.Header.Diagonals = base.Foreground(primary)
577+ s.Header.Charm = base.Foreground(o.secondary)
578+ s.Header.Diagonals = base.Foreground(o.primary)
615579 s.Header.Percentage = muted
580+ s.Header.Hypercredit = base.Foreground(charmtone.Dolly)
616581 s.Header.Keystroke = muted
617582 s.Header.KeystrokeTip = subtle
618583 s.Header.WorkingDir = muted
619584 s.Header.Separator = subtle
620− s.Header.Wrapper = lipgloss.NewStyle().Foreground(fgBase)
585+ s.Header.Wrapper = lipgloss.NewStyle().Foreground(o.fgBase)
621586 s.Header.LogoGradCanvas = lipgloss.NewStyle()
622− s.Header.LogoGradFromColor = secondary
623− s.Header.LogoGradToColor = primary
587+ s.Header.LogoGradFromColor = o.secondary
588+ s.Header.LogoGradToColor = o.primary
624589
625590 s.CompactDetails.Title = base
626− s.CompactDetails.View = base.Padding(0, 1, 1, 1).Border(lipgloss.RoundedBorder()).BorderForeground(borderFocus)
627− s.CompactDetails.Version = lipgloss.NewStyle().Foreground(border)
591+ s.CompactDetails.View = base.Padding(0, 1, 1, 1).Border(lipgloss.RoundedBorder()).BorderForeground(o.primary)
592+ s.CompactDetails.Version = lipgloss.NewStyle().Foreground(o.separator)
628593
629594 // Tool rendering styles
630− s.Tool.IconPending = base.Foreground(successMuted).SetString(ToolPending)
631− s.Tool.IconSuccess = base.Foreground(success).SetString(ToolSuccess)
632− s.Tool.IconError = base.Foreground(error).SetString(ToolError)
595+ s.Tool.IconPending = base.Foreground(o.successMostSubtle).SetString(ToolPending)
596+ s.Tool.IconSuccess = base.Foreground(o.success).SetString(ToolSuccess)
597+ s.Tool.IconError = base.Foreground(o.error).SetString(ToolError)
633598 s.Tool.IconCancelled = muted.SetString(ToolPending)
634599
635− s.Tool.NameNormal = base.Foreground(info)
636− s.Tool.NameNested = base.Foreground(info)
600+ s.Tool.NameNormal = base.Foreground(o.info)
601+ s.Tool.NameNested = base.Foreground(o.info)
637602
638603 s.Tool.ParamMain = subtle
639604 s.Tool.ParamKey = subtle
640605
641606 // Content rendering - prepared styles that accept width parameter
642− s.Tool.ContentLine = muted.Background(bgBaseLighter)
643− s.Tool.ContentTruncation = muted.Background(bgBaseLighter)
644− s.Tool.ContentCodeLine = base.Background(bgBase).PaddingLeft(2)
645− s.Tool.ContentCodeTruncation = muted.Background(bgBase).PaddingLeft(2)
646− s.Tool.ContentCodeBg = bgBase
607+ s.Tool.ContentLine = muted.Background(o.bgLeastVisible)
608+ s.Tool.ContentTruncation = muted.Background(o.bgLeastVisible)
609+ s.Tool.ContentCodeLine = base.Background(o.bgBase).PaddingLeft(2)
610+ s.Tool.ContentCodeTruncation = muted.Background(o.bgBase).PaddingLeft(2)
611+ s.Tool.ContentCodeBg = o.bgBase
647612 s.Tool.Body = base.PaddingLeft(2)
648613
649614 // Deprecated - kept for backward compatibility
650− s.Tool.ContentBg = muted.Background(bgBaseLighter)
615+ s.Tool.ContentBg = muted.Background(o.bgLeastVisible)
651616 s.Tool.ContentText = muted
652− s.Tool.ContentLineNumber = base.Foreground(fgMuted).Background(bgBase).PaddingRight(1).PaddingLeft(1)
617+ s.Tool.ContentLineNumber = base.Foreground(o.fgMoreSubtle).Background(o.bgBase).PaddingRight(1).PaddingLeft(1)
653618
654− s.Tool.StateWaiting = base.Foreground(fgSubtle)
655− s.Tool.StateCancelled = base.Foreground(fgSubtle)
619+ s.Tool.StateWaiting = base.Foreground(o.fgMostSubtle)
620+ s.Tool.StateCancelled = base.Foreground(o.fgMostSubtle)
656621
657− s.Tool.ErrorTag = base.Padding(0, 1).Background(danger).Foreground(onAccent)
658− s.Tool.ErrorMessage = base.Foreground(fgHalfMuted)
622+ s.Tool.ErrorTag = base.Padding(0, 1).Background(o.destructive).Foreground(o.onPrimary)
623+ s.Tool.ErrorMessage = base.Foreground(o.fgSubtle)
659624
660625 // Diff and multi-edit styles
661− s.Tool.DiffTruncation = muted.Background(bgBaseLighter).PaddingLeft(2)
662− s.Tool.NoteTag = base.Padding(0, 1).Background(info).Foreground(onAccent)
663− s.Tool.NoteMessage = base.Foreground(fgHalfMuted)
626+ s.Tool.DiffTruncation = muted.Background(o.bgLeastVisible).PaddingLeft(2)
627+ s.Tool.NoteTag = base.Padding(0, 1).Background(o.info).Foreground(o.onPrimary)
628+ s.Tool.NoteMessage = base.Foreground(o.fgSubtle)
664629
665630 // Job header styles
666− s.Tool.JobIconPending = base.Foreground(successMuted)
667− s.Tool.JobIconError = base.Foreground(error)
668− s.Tool.JobIconSuccess = base.Foreground(success)
669− s.Tool.JobToolName = base.Foreground(info)
670− s.Tool.JobAction = base.Foreground(infoMuted)
631+ s.Tool.JobIconPending = base.Foreground(o.successMostSubtle)
632+ s.Tool.JobIconError = base.Foreground(o.error)
633+ s.Tool.JobIconSuccess = base.Foreground(o.success)
634+ s.Tool.JobToolName = base.Foreground(o.info)
635+ s.Tool.JobAction = base.Foreground(o.infoMostSubtle)
671636 s.Tool.JobPID = muted
672637 s.Tool.JobDescription = subtle
673638
674639 // Agent task styles
675− s.Tool.AgentTaskTag = base.Bold(true).Padding(0, 1).MarginLeft(2).Background(infoSubtle).Foreground(onAccent)
640+ s.Tool.AgentTaskTag = base.Bold(true).Padding(0, 1).MarginLeft(2).Background(o.infoMoreSubtle).Foreground(o.onPrimary)
676641 s.Tool.AgentPrompt = muted
677642
678643 // Agentic fetch styles
679− s.Tool.AgenticFetchPromptTag = base.Bold(true).Padding(0, 1).MarginLeft(2).Background(success).Foreground(border)
644+ s.Tool.AgenticFetchPromptTag = base.Bold(true).Padding(0, 1).MarginLeft(2).Background(o.success).Foreground(o.separator)
680645
681646 // Todo styles
682− s.Tool.TodoRatio = base.Foreground(infoMuted)
683− s.Tool.TodoCompletedIcon = base.Foreground(success)
684− s.Tool.TodoInProgressIcon = base.Foreground(successMuted)
685− s.Tool.TodoPendingIcon = base.Foreground(fgMuted)
686− s.Tool.TodoStatusNote = lipgloss.NewStyle().Foreground(fgSubtle)
687− s.Tool.TodoItem = lipgloss.NewStyle().Foreground(fgBase)
688− s.Tool.TodoJustStarted = lipgloss.NewStyle().Foreground(fgBase)
647+ s.Tool.TodoRatio = base.Foreground(o.infoMostSubtle)
648+ s.Tool.TodoCompletedIcon = base.Foreground(o.success)
649+ s.Tool.TodoInProgressIcon = base.Foreground(o.successMostSubtle)
650+ s.Tool.TodoPendingIcon = base.Foreground(o.fgMoreSubtle)
651+ s.Tool.TodoStatusNote = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
652+ s.Tool.TodoItem = lipgloss.NewStyle().Foreground(o.fgBase)
653+ s.Tool.TodoJustStarted = lipgloss.NewStyle().Foreground(o.fgBase)
689654
690655 // MCP styles
691− s.Tool.MCPName = base.Foreground(info)
692− s.Tool.MCPToolName = base.Foreground(infoMuted)
693− s.Tool.MCPArrow = base.Foreground(info).SetString(ArrowRightIcon)
656+ s.Tool.MCPName = base.Foreground(o.info)
657+ s.Tool.MCPToolName = base.Foreground(o.infoMostSubtle)
658+ s.Tool.MCPArrow = base.Foreground(o.info).SetString(ArrowRightIcon)
694659
695660 // Loading indicators for images, skills
696− s.Tool.ResourceLoadedText = base.Foreground(success)
697− s.Tool.ResourceLoadedIndicator = base.Foreground(successMuted)
661+ s.Tool.ResourceLoadedText = base.Foreground(o.success)
662+ s.Tool.ResourceLoadedIndicator = base.Foreground(o.successMostSubtle)
698663 s.Tool.ResourceName = base
699664 s.Tool.MediaType = base
700− s.Tool.ResourceSize = base.Foreground(fgMuted)
665+ s.Tool.ResourceSize = base.Foreground(o.fgMoreSubtle)
666+
667+ // Hook styles
668+ s.Tool.HookLabel = base.Foreground(o.successMoreSubtle)
669+ s.Tool.HookName = base
670+ s.Tool.HookMatcher = base.Foreground(o.fgMoreSubtle)
671+ s.Tool.HookArrow = base.Foreground(o.successMoreSubtle)
672+ s.Tool.HookDetail = base.Foreground(o.fgMoreSubtle)
673+ s.Tool.HookOK = base.Foreground(o.successMostSubtle)
674+ s.Tool.HookDenied = base.Foreground(o.error)
675+ s.Tool.HookDeniedLabel = base.Foreground(o.destructive)
676+ s.Tool.HookDeniedReason = base.Foreground(o.bgMostVisible)
677+ s.Tool.HookRewrote = base.Foreground(o.bgMostVisible)
701678
702679 // Tool-call action verbs and result-list styling.
703− s.Tool.ActionCreate = lipgloss.NewStyle().Foreground(successSubtle)
704− s.Tool.ActionDestroy = lipgloss.NewStyle().Foreground(danger)
705− s.Tool.ResultEmpty = lipgloss.NewStyle().Foreground(fgSubtle)
706− s.Tool.ResultTruncation = lipgloss.NewStyle().Foreground(fgSubtle)
707− s.Tool.ResultItemName = lipgloss.NewStyle().Foreground(fgBase)
708− s.Tool.ResultItemDesc = lipgloss.NewStyle().Foreground(fgSubtle)
680+ s.Tool.ActionCreate = lipgloss.NewStyle().Foreground(o.successMoreSubtle)
681+ s.Tool.ActionDestroy = lipgloss.NewStyle().Foreground(o.destructive)
682+ s.Tool.ResultEmpty = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
683+ s.Tool.ResultTruncation = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
684+ s.Tool.ResultItemName = lipgloss.NewStyle().Foreground(o.fgBase)
685+ s.Tool.ResultItemDesc = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
709686
710687 // Buttons
711− s.Button.Focused = lipgloss.NewStyle().Foreground(onAccent).Background(secondary)
712− s.Button.Blurred = lipgloss.NewStyle().Foreground(fgBase).Background(bgSubtle)
688+ s.Button.Focused = lipgloss.NewStyle().Foreground(o.onPrimary).Background(o.secondary)
689+ s.Button.Blurred = lipgloss.NewStyle().Foreground(o.fgBase).Background(o.bgLessVisible)
713690
714691 // Editor
715− s.Editor.PromptNormalFocused = lipgloss.NewStyle().Foreground(successMuted).SetString("::: ")
716− s.Editor.PromptNormalBlurred = s.Editor.PromptNormalFocused.Foreground(fgMuted)
717− s.Editor.PromptYoloIconFocused = lipgloss.NewStyle().MarginRight(1).Foreground(fgSubtle).Background(busy).Bold(true).SetString(" ! ")
718− s.Editor.PromptYoloIconBlurred = s.Editor.PromptYoloIconFocused.Foreground(bgBase).Background(fgMuted)
719− s.Editor.PromptYoloDotsFocused = lipgloss.NewStyle().MarginRight(1).Foreground(warning).SetString(":::")
720− s.Editor.PromptYoloDotsBlurred = s.Editor.PromptYoloDotsFocused.Foreground(fgMuted)
692+ s.Editor.PromptNormalFocused = lipgloss.NewStyle().Foreground(o.successMostSubtle).SetString("::: ")
693+ s.Editor.PromptNormalBlurred = s.Editor.PromptNormalFocused.Foreground(o.fgMoreSubtle)
694+ s.Editor.PromptYoloIconFocused = lipgloss.NewStyle().MarginRight(1).Foreground(o.fgMostSubtle).Background(o.busy).Bold(true).SetString(" ! ")
695+ s.Editor.PromptYoloIconBlurred = s.Editor.PromptYoloIconFocused.Foreground(o.bgBase).Background(o.fgMoreSubtle)
696+ s.Editor.PromptYoloDotsFocused = lipgloss.NewStyle().MarginRight(1).Foreground(o.warningSubtle).SetString(":::")
697+ s.Editor.PromptYoloDotsBlurred = s.Editor.PromptYoloDotsFocused.Foreground(o.fgMoreSubtle)
721698
722− s.Radio.On = lipgloss.NewStyle().Foreground(fgHalfMuted).SetString(RadioOn)
723− s.Radio.Off = lipgloss.NewStyle().Foreground(fgHalfMuted).SetString(RadioOff)
724− s.Radio.Label = lipgloss.NewStyle().Foreground(fgHalfMuted)
699+ s.Radio.On = lipgloss.NewStyle().Foreground(o.fgSubtle).SetString(RadioOn)
700+ s.Radio.Off = lipgloss.NewStyle().Foreground(o.fgSubtle).SetString(RadioOff)
701+ s.Radio.Label = lipgloss.NewStyle().Foreground(o.fgSubtle)
725702
726703 // Logo
727− s.Logo.FieldColor = primary
728− s.Logo.TitleColorA = secondary
729− s.Logo.TitleColorB = primary
730− s.Logo.CharmColor = secondary
731− s.Logo.VersionColor = primary
732− s.Logo.SmallCharm = lipgloss.NewStyle().Foreground(secondary)
733− s.Logo.SmallDiagonals = lipgloss.NewStyle().Foreground(primary)
704+ s.Logo.FieldColor = o.primary
705+ s.Logo.TitleColorA = o.secondary
706+ s.Logo.TitleColorB = o.primary
707+ s.Logo.CharmColor = o.secondary
708+ s.Logo.VersionColor = o.primary
709+ s.Logo.SmallCharm = lipgloss.NewStyle().Foreground(o.secondary)
710+ s.Logo.SmallDiagonals = lipgloss.NewStyle().Foreground(o.primary)
734711 s.Logo.GradCanvas = lipgloss.NewStyle()
735− s.Logo.SmallGradFromColor = secondary
736− s.Logo.SmallGradToColor = primary
712+ s.Logo.SmallGradFromColor = o.secondary
713+ s.Logo.SmallGradToColor = o.primary
737714
738715 // Section
739716 s.Section.Title = subtle
740− s.Section.Line = base.Foreground(border)
717+ s.Section.Line = base.Foreground(o.separator)
741718
742719 // Initialize
743720 s.Initialize.Header = base
744721 s.Initialize.Content = muted
745− s.Initialize.Accent = base.Foreground(successMuted)
722+ s.Initialize.Accent = base.Foreground(o.successMostSubtle)
746723
747724 // ResourceGroup (LSP/MCP/skills sidebar lists).
748− s.Resource.Heading = lipgloss.NewStyle().Foreground(fgSubtle)
749− s.Resource.Name = lipgloss.NewStyle().Foreground(fgMuted)
750− s.Resource.StatusText = lipgloss.NewStyle().Foreground(fgSubtle)
751− s.Resource.OfflineIcon = lipgloss.NewStyle().Foreground(bgOverlay).SetString("●")
752− s.Resource.BusyIcon = s.Resource.OfflineIcon.Foreground(busy)
753− s.Resource.ErrorIcon = s.Resource.OfflineIcon.Foreground(danger)
754− s.Resource.OnlineIcon = s.Resource.OfflineIcon.Foreground(successMuted)
755− s.Resource.DisabledIcon = lipgloss.NewStyle().Foreground(fgMuted).SetString("●")
756− s.Resource.AdditionalText = lipgloss.NewStyle().Foreground(fgSubtle)
757− s.Resource.CapabilityCount = lipgloss.NewStyle().Foreground(fgSubtle)
758− s.Resource.RowTitleBase = lipgloss.NewStyle().Foreground(fgBase)
759− s.Resource.RowDescBase = lipgloss.NewStyle().Foreground(fgBase)
760− s.Resource.DefaultTitleFg = fgMuted
761− s.Resource.DefaultDescFg = fgSubtle
725+ s.Resource.Heading = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
726+ s.Resource.Name = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
727+ s.Resource.StatusText = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
728+ s.Resource.OfflineIcon = lipgloss.NewStyle().Foreground(o.bgMostVisible).SetString("●")
729+ s.Resource.BusyIcon = s.Resource.OfflineIcon.Foreground(o.busy)
730+ s.Resource.ErrorIcon = s.Resource.OfflineIcon.Foreground(o.destructive)
731+ s.Resource.OnlineIcon = s.Resource.OfflineIcon.Foreground(o.successMostSubtle)
732+ s.Resource.DisabledIcon = lipgloss.NewStyle().Foreground(o.fgMoreSubtle).SetString("●")
733+ s.Resource.AdditionalText = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
734+ s.Resource.CapabilityCount = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
735+ s.Resource.RowTitleBase = lipgloss.NewStyle().Foreground(o.fgBase)
736+ s.Resource.RowDescBase = lipgloss.NewStyle().Foreground(o.fgBase)
737+ s.Resource.DefaultTitleFg = o.fgMoreSubtle
738+ s.Resource.DefaultDescFg = o.fgMostSubtle
762739
763740 // LSP
764− s.LSP.ErrorDiagnostic = base.Foreground(error)
765− s.LSP.WarningDiagnostic = base.Foreground(warning)
766− s.LSP.HintDiagnostic = base.Foreground(fgHalfMuted)
767− s.LSP.InfoDiagnostic = base.Foreground(info)
741+ s.LSP.ErrorDiagnostic = base.Foreground(o.error)
742+ s.LSP.WarningDiagnostic = base.Foreground(o.warningSubtle)
743+ s.LSP.HintDiagnostic = base.Foreground(o.fgSubtle)
744+ s.LSP.InfoDiagnostic = base.Foreground(o.info)
768745
769746 // Files
770− s.Files.Path = lipgloss.NewStyle().Foreground(fgMuted)
771− s.Files.Additions = lipgloss.NewStyle().Foreground(successMuted)
772− s.Files.Deletions = lipgloss.NewStyle().Foreground(error)
773− s.Files.SectionTitle = lipgloss.NewStyle().Foreground(fgSubtle)
774− s.Files.EmptyMessage = lipgloss.NewStyle().Foreground(fgSubtle)
775− s.Files.TruncationHint = lipgloss.NewStyle().Foreground(fgSubtle)
747+ s.Files.Path = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
748+ s.Files.Additions = lipgloss.NewStyle().Foreground(o.successMostSubtle)
749+ s.Files.Deletions = lipgloss.NewStyle().Foreground(o.error)
750+ s.Files.SectionTitle = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
751+ s.Files.EmptyMessage = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
752+ s.Files.TruncationHint = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
776753
777754 // Sidebar
778− s.Sidebar.SessionTitle = lipgloss.NewStyle().Foreground(fgMuted)
779− s.Sidebar.WorkingDir = lipgloss.NewStyle().Foreground(fgMuted)
755+ s.Sidebar.SessionTitle = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
756+ s.Sidebar.WorkingDir = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
780757
781758 // ModelInfo
782− s.ModelInfo.Icon = lipgloss.NewStyle().Foreground(fgSubtle)
783− s.ModelInfo.Name = lipgloss.NewStyle().Foreground(fgBase)
784− s.ModelInfo.Provider = lipgloss.NewStyle().Foreground(fgMuted)
785− s.ModelInfo.ProviderFallback = lipgloss.NewStyle().Foreground(fgMuted).PaddingLeft(2)
786− s.ModelInfo.Reasoning = lipgloss.NewStyle().Foreground(fgSubtle).PaddingLeft(2)
787− s.ModelInfo.TokenCount = lipgloss.NewStyle().Foreground(fgSubtle)
788− s.ModelInfo.TokenPercentage = lipgloss.NewStyle().Foreground(fgMuted)
789− s.ModelInfo.Cost = lipgloss.NewStyle().Foreground(fgMuted)
759+ s.ModelInfo.Icon = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
760+ s.ModelInfo.Name = lipgloss.NewStyle().Foreground(o.fgBase)
761+ s.ModelInfo.Provider = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
762+ s.ModelInfo.ProviderFallback = lipgloss.NewStyle().Foreground(o.fgMoreSubtle).PaddingLeft(2)
763+ s.ModelInfo.Reasoning = lipgloss.NewStyle().Foreground(o.fgMostSubtle).PaddingLeft(2)
764+ s.ModelInfo.TokenCount = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
765+ s.ModelInfo.TokenPercentage = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
766+ s.ModelInfo.Cost = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
767+ s.ModelInfo.HypercreditIcon = lipgloss.NewStyle().Foreground(charmtone.Dolly)
768+ s.ModelInfo.HypercreditText = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
790769
791770 // ResourceGroup
792− s.Resource.DefaultTitleFg = fgMuted
793− s.Resource.DefaultDescFg = fgSubtle
771+ s.Resource.DefaultTitleFg = o.fgMoreSubtle
772+ s.Resource.DefaultDescFg = o.fgMostSubtle
794773
795774 // Chat
796775 messageFocussedBorder := lipgloss.Border{
797776 Left: "▌",
798777 }
799778
800− s.Messages.NoContent = lipgloss.NewStyle().Foreground(fgBase)
779+ s.Messages.NoContent = lipgloss.NewStyle().Foreground(o.fgBase)
801780 s.Messages.UserBlurred = s.Messages.NoContent.PaddingLeft(1).BorderLeft(true).
802− BorderForeground(primary).BorderStyle(lipgloss.NormalBorder())
781+ BorderForeground(o.primary).BorderStyle(lipgloss.NormalBorder())
803782 s.Messages.UserFocused = s.Messages.NoContent.PaddingLeft(1).BorderLeft(true).
804− BorderForeground(primary).BorderStyle(messageFocussedBorder)
783+ BorderForeground(o.primary).BorderStyle(messageFocussedBorder)
805784 s.Messages.AssistantBlurred = s.Messages.NoContent.PaddingLeft(2)
806785 s.Messages.AssistantFocused = s.Messages.NoContent.PaddingLeft(1).BorderLeft(true).
807− BorderForeground(successMuted).BorderStyle(messageFocussedBorder)
786+ BorderForeground(o.successMostSubtle).BorderStyle(messageFocussedBorder)
808787 s.Messages.Thinking = lipgloss.NewStyle().MaxHeight(10)
809788 s.Messages.ErrorTag = lipgloss.NewStyle().Padding(0, 1).
810− Background(danger).Foreground(onAccent)
811− s.Messages.ErrorTitle = lipgloss.NewStyle().Foreground(fgHalfMuted)
812− s.Messages.ErrorDetails = lipgloss.NewStyle().Foreground(fgSubtle)
789+ Background(o.destructive).Foreground(o.onPrimary)
790+ s.Messages.ErrorTitle = lipgloss.NewStyle().Foreground(o.fgSubtle)
791+ s.Messages.ErrorDetails = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
813792
814793 // Message item styles
815794 s.Messages.ToolCallFocused = muted.PaddingLeft(1).
816795 BorderStyle(messageFocussedBorder).
817796 BorderLeft(true).
818− BorderForeground(successMuted)
797+ BorderForeground(o.successMostSubtle)
819798 s.Messages.ToolCallBlurred = muted.PaddingLeft(2)
820799 // No padding or border for compact tool calls within messages
821800 s.Messages.ToolCallCompact = muted
@@ -824,144 +803,144 @@ func quickStyle(o quickStyleOpts) Styles {
824803 s.Messages.AssistantInfoModel = muted
825804 s.Messages.AssistantInfoProvider = subtle
826805 s.Messages.AssistantInfoDuration = subtle
827− s.Messages.AssistantCanceled = lipgloss.NewStyle().Foreground(fgBase).Italic(true)
806+ s.Messages.AssistantCanceled = lipgloss.NewStyle().Foreground(o.fgBase).Italic(true)
828807
829808 // Thinking section styles
830− s.Messages.ThinkingBox = subtle.Background(bgBaseLighter)
809+ s.Messages.ThinkingBox = subtle.Background(o.bgLeastVisible)
831810 s.Messages.ThinkingTruncationHint = muted
832811 s.Messages.ThinkingFooterTitle = muted
833812 s.Messages.ThinkingFooterDuration = subtle
834813
835814 // Text selection.
836− s.TextSelection = lipgloss.NewStyle().Foreground(onPrimary).Background(primary)
815+ s.TextSelection = lipgloss.NewStyle().Foreground(o.onPrimary).Background(o.primary)
837816
838817 // Dialog styles
839− s.Dialog.Title = base.Padding(0, 1).Foreground(primary)
840− s.Dialog.TitleText = base.Foreground(primary)
841− s.Dialog.TitleError = base.Foreground(danger)
842− s.Dialog.TitleAccent = base.Foreground(success).Bold(true)
818+ s.Dialog.Title = base.Padding(0, 1).Foreground(o.primary)
819+ s.Dialog.TitleText = base.Foreground(o.primary)
820+ s.Dialog.TitleError = base.Foreground(o.destructive)
821+ s.Dialog.TitleAccent = base.Foreground(o.success).Bold(true)
843822 s.Dialog.TitleLineBase = lipgloss.NewStyle()
844− s.Dialog.TitleGradFromColor = primary
845− s.Dialog.TitleGradToColor = secondary
823+ s.Dialog.TitleGradFromColor = o.primary
824+ s.Dialog.TitleGradToColor = o.secondary
846825
847826 // Dialog.ListItem (commands, reasoning, models)
848− s.Dialog.ListItem.InfoBlurred = lipgloss.NewStyle().Foreground(fgBase)
849− s.Dialog.ListItem.InfoFocused = lipgloss.NewStyle().Foreground(fgBase)
827+ s.Dialog.ListItem.InfoBlurred = lipgloss.NewStyle().Foreground(o.fgBase)
828+ s.Dialog.ListItem.InfoFocused = lipgloss.NewStyle().Foreground(o.fgBase)
850829
851830 // Dialog.Models
852− s.Dialog.Models.ConfiguredText = lipgloss.NewStyle().Foreground(fgSubtle)
831+ s.Dialog.Models.ConfiguredText = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
853832
854833 // Dialog.Permissions
855− s.Dialog.Permissions.KeyText = lipgloss.NewStyle().Foreground(fgMuted)
856− s.Dialog.Permissions.ValueText = lipgloss.NewStyle().Foreground(fgBase)
857− s.Dialog.Permissions.ParamsBg = bgSubtle
834+ s.Dialog.Permissions.KeyText = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
835+ s.Dialog.Permissions.ValueText = lipgloss.NewStyle().Foreground(o.fgBase)
836+ s.Dialog.Permissions.ParamsBg = o.bgLessVisible
858837
859838 // Dialog.Quit
860− s.Dialog.Quit.Content = lipgloss.NewStyle().Foreground(fgBase)
861− s.Dialog.Quit.Frame = lipgloss.NewStyle().BorderForeground(borderFocus).Border(lipgloss.RoundedBorder()).Padding(1, 2)
862− s.Dialog.View = base.Border(lipgloss.RoundedBorder()).BorderForeground(borderFocus)
863− s.Dialog.PrimaryText = base.Padding(0, 1).Foreground(primary)
864− s.Dialog.SecondaryText = base.Padding(0, 1).Foreground(fgSubtle)
839+ s.Dialog.Quit.Content = lipgloss.NewStyle().Foreground(o.fgBase)
840+ s.Dialog.Quit.Frame = lipgloss.NewStyle().BorderForeground(o.primary).Border(lipgloss.RoundedBorder()).Padding(1, 2)
841+ s.Dialog.View = base.Border(lipgloss.RoundedBorder()).BorderForeground(o.primary)
842+ s.Dialog.PrimaryText = base.Padding(0, 1).Foreground(o.primary)
843+ s.Dialog.SecondaryText = base.Padding(0, 1).Foreground(o.fgMostSubtle)
865844 s.Dialog.HelpView = base.Padding(0, 1).AlignHorizontal(lipgloss.Left)
866− s.Dialog.Help.ShortKey = base.Foreground(fgMuted)
867− s.Dialog.Help.ShortDesc = base.Foreground(fgSubtle)
868− s.Dialog.Help.ShortSeparator = base.Foreground(border)
869− s.Dialog.Help.Ellipsis = base.Foreground(border)
870− s.Dialog.Help.FullKey = base.Foreground(fgMuted)
871− s.Dialog.Help.FullDesc = base.Foreground(fgSubtle)
872− s.Dialog.Help.FullSeparator = base.Foreground(border)
873− s.Dialog.NormalItem = base.Padding(0, 1).Foreground(fgBase)
874− s.Dialog.SelectedItem = base.Padding(0, 1).Background(primary).Foreground(fgBase)
845+ s.Dialog.Help.ShortKey = base.Foreground(o.fgMoreSubtle)
846+ s.Dialog.Help.ShortDesc = base.Foreground(o.fgMostSubtle)
847+ s.Dialog.Help.ShortSeparator = base.Foreground(o.separator)
848+ s.Dialog.Help.Ellipsis = base.Foreground(o.separator)
849+ s.Dialog.Help.FullKey = base.Foreground(o.fgMoreSubtle)
850+ s.Dialog.Help.FullDesc = base.Foreground(o.fgMostSubtle)
851+ s.Dialog.Help.FullSeparator = base.Foreground(o.separator)
852+ s.Dialog.NormalItem = base.Padding(0, 1).Foreground(o.fgBase)
853+ s.Dialog.SelectedItem = base.Padding(0, 1).Background(o.primary).Foreground(o.onPrimary)
875854 s.Dialog.InputPrompt = base.Margin(1, 1)
876855
877856 s.Dialog.List = base.Margin(0, 0, 1, 0)
878− s.Dialog.ContentPanel = base.Background(bgSubtle).Foreground(fgBase).Padding(1, 2)
879− s.Dialog.Spinner = base.Foreground(secondary)
880− s.Dialog.ScrollbarThumb = base.Foreground(secondary)
881− s.Dialog.ScrollbarTrack = base.Foreground(border)
857+ s.Dialog.ContentPanel = base.Background(o.bgLessVisible).Foreground(o.fgBase).Padding(1, 2)
858+ s.Dialog.Spinner = base.Foreground(o.secondary)
859+ s.Dialog.ScrollbarThumb = base.Foreground(o.secondary)
860+ s.Dialog.ScrollbarTrack = base.Foreground(o.separator)
882861
883− s.Dialog.ImagePreview = lipgloss.NewStyle().Padding(0, 1).Foreground(fgSubtle)
862+ s.Dialog.ImagePreview = lipgloss.NewStyle().Padding(0, 1).Foreground(o.fgMostSubtle)
884863
885864 // API key input dialog
886− s.Dialog.APIKey.Spinner = base.Foreground(success)
865+ s.Dialog.APIKey.Spinner = base.Foreground(o.success)
887866
888867 // OAuth dialog
889− s.Dialog.OAuth.Spinner = base.Foreground(successSubtle)
890− s.Dialog.OAuth.Instructions = lipgloss.NewStyle().Foreground(onAccent)
891− s.Dialog.OAuth.UserCode = lipgloss.NewStyle().Bold(true).Foreground(onAccent)
892− s.Dialog.OAuth.Success = lipgloss.NewStyle().Foreground(successSubtle)
893− s.Dialog.OAuth.Link = lipgloss.NewStyle().Foreground(successMuted).Underline(true)
894− s.Dialog.OAuth.Enter = lipgloss.NewStyle().Foreground(primary)
895− s.Dialog.OAuth.ErrorText = lipgloss.NewStyle().Foreground(error)
896− s.Dialog.OAuth.StatusText = lipgloss.NewStyle().Foreground(fgMuted)
897− s.Dialog.OAuth.UserCodeBg = bgBaseLighter
868+ s.Dialog.OAuth.Spinner = base.Foreground(o.successMoreSubtle)
869+ s.Dialog.OAuth.Instructions = lipgloss.NewStyle().Foreground(o.fgBase)
870+ s.Dialog.OAuth.UserCode = lipgloss.NewStyle().Bold(true).Foreground(o.fgBase)
871+ s.Dialog.OAuth.Success = lipgloss.NewStyle().Foreground(o.successMoreSubtle)
872+ s.Dialog.OAuth.Link = lipgloss.NewStyle().Foreground(o.successMostSubtle).Underline(true)
873+ s.Dialog.OAuth.Enter = lipgloss.NewStyle().Foreground(o.keyword)
874+ s.Dialog.OAuth.ErrorText = lipgloss.NewStyle().Foreground(o.error)
875+ s.Dialog.OAuth.StatusText = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
876+ s.Dialog.OAuth.UserCodeBg = o.bgLeastVisible
898877
899878 s.Dialog.Arguments.Content = base.Padding(1)
900879 s.Dialog.Arguments.Description = base.MarginBottom(1).MaxHeight(3)
901− s.Dialog.Arguments.InputLabelBlurred = base.Foreground(fgMuted)
880+ s.Dialog.Arguments.InputLabelBlurred = base.Foreground(o.fgMoreSubtle)
902881 s.Dialog.Arguments.InputLabelFocused = base.Bold(true)
903− s.Dialog.Arguments.InputRequiredMarkBlurred = base.Foreground(fgMuted).SetString("*")
904− s.Dialog.Arguments.InputRequiredMarkFocused = base.Foreground(primary).Bold(true).SetString("*")
882+ s.Dialog.Arguments.InputRequiredMarkBlurred = base.Foreground(o.fgMoreSubtle).SetString("*")
883+ s.Dialog.Arguments.InputRequiredMarkFocused = base.Foreground(o.primary).Bold(true).SetString("*")
905884
906− s.Dialog.Sessions.DeletingTitle = s.Dialog.Title.Foreground(danger)
907− s.Dialog.Sessions.DeletingView = s.Dialog.View.BorderForeground(danger)
885+ s.Dialog.Sessions.DeletingTitle = s.Dialog.Title.Foreground(o.destructive)
886+ s.Dialog.Sessions.DeletingView = s.Dialog.View.BorderForeground(o.destructive)
908887 s.Dialog.Sessions.DeletingMessage = base.Padding(1)
909− s.Dialog.Sessions.DeletingTitleGradientFromColor = danger
910− s.Dialog.Sessions.DeletingTitleGradientToColor = primary
911− s.Dialog.Sessions.DeletingItemBlurred = s.Dialog.NormalItem.Foreground(fgSubtle)
912− s.Dialog.Sessions.DeletingItemFocused = s.Dialog.SelectedItem.Background(danger).Foreground(onAccent)
888+ s.Dialog.Sessions.DeletingTitleGradientFromColor = o.destructive
889+ s.Dialog.Sessions.DeletingTitleGradientToColor = o.primary
890+ s.Dialog.Sessions.DeletingItemBlurred = s.Dialog.NormalItem.Foreground(o.fgMostSubtle)
891+ s.Dialog.Sessions.DeletingItemFocused = s.Dialog.SelectedItem.Background(o.destructive).Foreground(o.onPrimary)
913892
914− s.Dialog.Sessions.RenamingingTitle = s.Dialog.Title.Foreground(warning)
915− s.Dialog.Sessions.RenamingView = s.Dialog.View.BorderForeground(warning)
893+ s.Dialog.Sessions.RenamingingTitle = s.Dialog.Title.Foreground(o.warningSubtle)
894+ s.Dialog.Sessions.RenamingView = s.Dialog.View.BorderForeground(o.warningSubtle)
916895 s.Dialog.Sessions.RenamingingMessage = base.Padding(1)
917− s.Dialog.Sessions.RenamingTitleGradientFromColor = warning
918− s.Dialog.Sessions.RenamingTitleGradientToColor = tertiary
919− s.Dialog.Sessions.RenamingItemBlurred = s.Dialog.NormalItem.Foreground(fgSubtle)
896+ s.Dialog.Sessions.RenamingTitleGradientFromColor = o.warningSubtle
897+ s.Dialog.Sessions.RenamingTitleGradientToColor = o.accent
898+ s.Dialog.Sessions.RenamingItemBlurred = s.Dialog.NormalItem.Foreground(o.fgMostSubtle)
920899 s.Dialog.Sessions.RenamingingItemFocused = s.Dialog.SelectedItem.UnsetBackground().UnsetForeground()
921− s.Dialog.Sessions.RenamingPlaceholder = base.Foreground(fgMuted)
922− s.Dialog.Sessions.InfoBlurred = lipgloss.NewStyle().Foreground(fgSubtle)
923− s.Dialog.Sessions.InfoFocused = lipgloss.NewStyle().Foreground(fgBase)
900+ s.Dialog.Sessions.RenamingPlaceholder = base.Foreground(o.fgMoreSubtle)
901+ s.Dialog.Sessions.InfoBlurred = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
902+ s.Dialog.Sessions.InfoFocused = lipgloss.NewStyle().Foreground(o.fgBase)
924903
925904 s.Status.Help = lipgloss.NewStyle().Padding(0, 1)
926− s.Status.SuccessIndicator = base.Foreground(bgSubtle).Background(success).Padding(0, 1).Bold(true).SetString("OKAY!")
905+ s.Status.SuccessIndicator = base.Foreground(o.bgLessVisible).Background(o.success).Padding(0, 1).Bold(true).SetString("OKAY!")
927906 s.Status.InfoIndicator = s.Status.SuccessIndicator
928907 s.Status.UpdateIndicator = s.Status.SuccessIndicator.SetString("HEY!")
929− s.Status.WarnIndicator = s.Status.SuccessIndicator.Foreground(bgOverlay).Background(warningStrong).SetString("WARNING")
930− s.Status.ErrorIndicator = s.Status.SuccessIndicator.Foreground(bgBase).Background(danger).SetString("ERROR")
931− s.Status.SuccessMessage = base.Foreground(bgSubtle).Background(successMuted).Padding(0, 1)
908+ s.Status.WarnIndicator = s.Status.SuccessIndicator.Foreground(o.bgMostVisible).Background(o.warning).SetString("WARNING")
909+ s.Status.ErrorIndicator = s.Status.SuccessIndicator.Foreground(o.bgBase).Background(o.destructive).SetString("ERROR")
910+ s.Status.SuccessMessage = base.Foreground(o.bgLessVisible).Background(o.successMostSubtle).Padding(0, 1)
932911 s.Status.InfoMessage = s.Status.SuccessMessage
933912 s.Status.UpdateMessage = s.Status.SuccessMessage
934− s.Status.WarnMessage = s.Status.SuccessMessage.Foreground(bgOverlay).Background(warning)
935− s.Status.ErrorMessage = s.Status.SuccessMessage.Foreground(onAccent).Background(error)
913+ s.Status.WarnMessage = s.Status.SuccessMessage.Foreground(o.bgMostVisible).Background(o.warningSubtle)
914+ s.Status.ErrorMessage = s.Status.SuccessMessage.Foreground(o.onPrimary).Background(o.error)
936915
937916 // Completions styles
938− s.Completions.Normal = base.Background(bgSubtle).Foreground(fgBase)
939− s.Completions.Focused = base.Background(primary).Foreground(onAccent)
917+ s.Completions.Normal = base.Background(o.bgLessVisible).Foreground(o.fgBase)
918+ s.Completions.Focused = base.Background(o.primary).Foreground(o.onPrimary)
940919 s.Completions.Match = base.Underline(true)
941920
942921 // Attachments styles
943− attachmentIconStyle := base.Foreground(bgSubtle).Background(success).Padding(0, 1)
922+ attachmentIconStyle := base.Foreground(o.bgLessVisible).Background(o.success).Padding(0, 1)
944923 s.Attachments.Image = attachmentIconStyle.SetString(ImageIcon)
945924 s.Attachments.Text = attachmentIconStyle.SetString(TextIcon)
946− s.Attachments.Normal = base.Padding(0, 1).MarginRight(1).Background(fgMuted).Foreground(fgBase)
947− s.Attachments.Deleting = base.Padding(0, 1).Bold(true).Background(danger).Foreground(fgBase)
925+ s.Attachments.Normal = base.Padding(0, 1).MarginRight(1).Background(o.fgMoreSubtle).Foreground(o.fgBase)
926+ s.Attachments.Deleting = base.Padding(0, 1).Bold(true).Background(o.destructive).Foreground(o.fgBase)
948927
949928 // Pills styles
950929 s.Pills.Base = base.Padding(0, 1)
951− s.Pills.Focused = base.Padding(0, 1).BorderStyle(lipgloss.RoundedBorder()).BorderForeground(bgOverlay)
930+ s.Pills.Focused = base.Padding(0, 1).BorderStyle(lipgloss.RoundedBorder()).BorderForeground(o.bgMostVisible)
952931 s.Pills.Blurred = base.Padding(0, 1).BorderStyle(lipgloss.HiddenBorder())
953− s.Pills.QueueItemPrefix = lipgloss.NewStyle().Foreground(fgMuted).SetString(" •")
954− s.Pills.QueueItemText = lipgloss.NewStyle().Foreground(fgMuted)
955− s.Pills.QueueLabel = lipgloss.NewStyle().Foreground(fgBase)
956− s.Pills.QueueIconBase = lipgloss.NewStyle().Foreground(fgBase)
957− s.Pills.QueueGradFromColor = error
958− s.Pills.QueueGradToColor = secondary
959− s.Pills.TodoLabel = lipgloss.NewStyle().Foreground(fgBase)
960− s.Pills.TodoProgress = lipgloss.NewStyle().Foreground(fgMuted)
961− s.Pills.TodoCurrentTask = lipgloss.NewStyle().Foreground(fgSubtle)
962− s.Pills.TodoSpinner = lipgloss.NewStyle().Foreground(successMuted)
963− s.Pills.HelpKey = lipgloss.NewStyle().Foreground(fgMuted)
964− s.Pills.HelpText = lipgloss.NewStyle().Foreground(fgSubtle)
932+ s.Pills.QueueItemPrefix = lipgloss.NewStyle().Foreground(o.fgMoreSubtle).SetString(" •")
933+ s.Pills.QueueItemText = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
934+ s.Pills.QueueLabel = lipgloss.NewStyle().Foreground(o.fgBase)
935+ s.Pills.QueueIconBase = lipgloss.NewStyle().Foreground(o.fgBase)
936+ s.Pills.QueueGradFromColor = o.error
937+ s.Pills.QueueGradToColor = o.secondary
938+ s.Pills.TodoLabel = lipgloss.NewStyle().Foreground(o.fgBase)
939+ s.Pills.TodoProgress = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
940+ s.Pills.TodoCurrentTask = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
941+ s.Pills.TodoSpinner = lipgloss.NewStyle().Foreground(o.successMostSubtle)
942+ s.Pills.HelpKey = lipgloss.NewStyle().Foreground(o.fgMoreSubtle)
943+ s.Pills.HelpText = lipgloss.NewStyle().Foreground(o.fgMostSubtle)
965944 s.Pills.Area = base
966945
967946 return s
internal/ui/styles/styles.go+8−4
@@ -17,10 +17,11 @@ import (
1717)
1818
1919const (
20− CheckIcon string = "✓"
21− SpinnerIcon string = "⋯"
22− LoadingIcon string = "⟳"
23− ModelIcon string = "◇"
20+ CheckIcon string = "✓"
21+ SpinnerIcon string = "⋯"
22+ LoadingIcon string = "⟳"
23+ ModelIcon string = "◇"
24+ HypercreditIcon string = "◆"
2425
2526 ArrowRightIcon string = "→"
2627
@@ -63,6 +64,7 @@ type Styles struct {
6364 Charm lipgloss.Style // Style for "Charm™" label
6465 Diagonals lipgloss.Style // Style for diagonal separators (╱)
6566 Percentage lipgloss.Style // Style for context percentage
67+ Hypercredit lipgloss.Style // Style for Hypercredit count (◆ N)
6668 Keystroke lipgloss.Style // Style for keystroke hints (e.g., "ctrl+d")
6769 KeystrokeTip lipgloss.Style // Style for keystroke action text (e.g., "open", "close")
6870 WorkingDir lipgloss.Style // Style for current working directory
@@ -189,6 +191,8 @@ type Styles struct {
189191 TokenCount lipgloss.Style // "(42K)" token count
190192 TokenPercentage lipgloss.Style // "42%" percent of context window
191193 Cost lipgloss.Style // "$0.42" cost readout
194+ HypercreditIcon lipgloss.Style // Hypercredit icon (◆)
195+ HypercreditText lipgloss.Style // Remaining Hypercredits text
192196 }
193197
194198 // Resource styles the LSP/MCP/skills sidebar lists: their heading,
internal/ui/styles/themes.go+75−29
@@ -2,40 +2,86 @@ package styles
22
33import "github.com/charmbracelet/x/exp/charmtone"
44
5+// ThemeForProvider returns the Styles associated with the given provider
6+// ID. Unknown or empty provider IDs yield the default Charmtone Pantera
7+// theme.
8+func ThemeForProvider(providerID string) Styles {
9+ switch providerID {
10+ case "hyper":
11+ return HypercrushObsidiana()
12+ default:
13+ return CharmtonePantera()
14+ }
15+}
16+
517// CharmtonePantera returns the Charmtone dark theme. It's the default style
618// for the UI.
719func CharmtonePantera() Styles {
820 return quickStyle(quickStyleOpts{
921 primary: charmtone.Charple,
1022 secondary: charmtone.Dolly,
11− tertiary: charmtone.Bok,
12−
13− fgBase: charmtone.Ash,
14− fgMuted: charmtone.Squid,
15− fgHalfMuted: charmtone.Smoke,
16− fgSubtle: charmtone.Oyster,
17−
18− onPrimary: charmtone.Salt,
19− onAccent: charmtone.Butter,
20−
21− bgBase: charmtone.Pepper,
22− bgBaseLighter: charmtone.BBQ,
23− bgSubtle: charmtone.Charcoal,
24− bgOverlay: charmtone.Iron,
25−
26− border: charmtone.Charcoal,
27− borderFocus: charmtone.Charple,
28−
29− danger: charmtone.Coral,
30− error: charmtone.Sriracha,
31− warning: charmtone.Zest,
32− warningStrong: charmtone.Mustard,
33− busy: charmtone.Citron,
34− info: charmtone.Malibu,
35− infoSubtle: charmtone.Sardine,
36− infoMuted: charmtone.Damson,
37− success: charmtone.Julep,
38− successSubtle: charmtone.Bok,
39− successMuted: charmtone.Guac,
23+ accent: charmtone.Bok,
24+ keyword: charmtone.Blush,
25+
26+ fgBase: charmtone.Ash,
27+ fgMoreSubtle: charmtone.Squid,
28+ fgSubtle: charmtone.Smoke,
29+ fgMostSubtle: charmtone.Oyster,
30+
31+ onPrimary: charmtone.Butter,
32+
33+ bgBase: charmtone.Pepper,
34+ bgLeastVisible: charmtone.BBQ,
35+ bgLessVisible: charmtone.Charcoal,
36+ bgMostVisible: charmtone.Iron,
37+
38+ separator: charmtone.Charcoal,
39+
40+ destructive: charmtone.Coral,
41+ error: charmtone.Sriracha,
42+ warningSubtle: charmtone.Zest,
43+ warning: charmtone.Mustard,
44+ busy: charmtone.Citron,
45+ info: charmtone.Malibu,
46+ infoMoreSubtle: charmtone.Sardine,
47+ infoMostSubtle: charmtone.Damson,
48+ success: charmtone.Julep,
49+ successMoreSubtle: charmtone.Bok,
50+ successMostSubtle: charmtone.Guac,
51+ })
52+}
53+
54+// HypercrushObsidiana returns the Hypercrush dark theme.
55+func HypercrushObsidiana() Styles {
56+ return quickStyle(quickStyleOpts{
57+ primary: charmtone.Charple,
58+ secondary: charmtone.Dolly,
59+ accent: charmtone.Bok,
60+
61+ fgBase: charmtone.Ash,
62+ fgMoreSubtle: charmtone.Squid,
63+ fgSubtle: charmtone.Smoke,
64+ fgMostSubtle: charmtone.Oyster,
65+
66+ onPrimary: charmtone.Butter,
67+
68+ bgBase: charmtone.Pepper,
69+ bgLeastVisible: charmtone.BBQ,
70+ bgLessVisible: charmtone.Charcoal,
71+ bgMostVisible: charmtone.Iron,
72+
73+ separator: charmtone.Charcoal,
74+
75+ destructive: charmtone.Coral,
76+ error: charmtone.Sriracha,
77+ warningSubtle: charmtone.Zest,
78+ warning: charmtone.Mustard,
79+ busy: charmtone.Citron,
80+ info: charmtone.Malibu,
81+ infoMoreSubtle: charmtone.Sardine,
82+ infoMostSubtle: charmtone.Damson,
83+ success: charmtone.Julep,
84+ successMoreSubtle: charmtone.Bok,
85+ successMostSubtle: charmtone.Guac,
4086 })
4187}
schema.json+4−15
@@ -102,10 +102,7 @@
102102 }
103103 },
104104 "additionalProperties": false,
105− "type": "object",
106− "required": [
107− "tools"
108− ]
105+ "type": "object"
109106 },
110107 "HookConfig": {
111108 "properties": {
@@ -354,8 +351,7 @@
354351 "context_window",
355352 "default_max_tokens",
356353 "can_reason",
357− "supports_attachments",
358− "options"
354+ "supports_attachments"
359355 ]
360356 },
361357 "ModelOptions": {
@@ -708,10 +704,7 @@
708704 }
709705 },
710706 "additionalProperties": false,
711− "type": "object",
712− "required": [
713− "completions"
714− ]
707+ "type": "object"
715708 },
716709 "Token": {
717710 "properties": {
@@ -779,11 +772,7 @@
779772 }
780773 },
781774 "additionalProperties": false,
782− "type": "object",
783− "required": [
784− "ls",
785− "grep"
786− ]
775+ "type": "object"
787776 }
788777 }
789778}