on main help sign in
.github/cla-signatures.json+216
since splitsnapshots
unifiedsplit
@@ -1879,6 +1879,222 @@
1879 "created_at": "2026-06-01T21:14:16Z",
1879 "created_at": "2026-06-01T21:14:16Z",
1880 "repoId": 987670088,
1880 "repoId": 987670088,
1881 "pullRequestNo": 3059
1881 "pullRequestNo": 3059
1882+ },
1883+ {
1884+ "name": "GroovyCarrot",
1885+ "id": 5589906,
1886+ "comment_id": 4623915928,
1887+ "created_at": "2026-06-04T16:01:30Z",
1888+ "repoId": 987670088,
1889+ "pullRequestNo": 3076
1890+ },
1891+ {
1892+ "name": "CnsMaple",
1893+ "id": 92523839,
1894+ "comment_id": 4628808493,
1895+ "created_at": "2026-06-05T06:24:00Z",
1896+ "repoId": 987670088,
1897+ "pullRequestNo": 3080
1898+ },
1899+ {
1900+ "name": "yuseferi",
1901+ "id": 1736832,
1902+ "comment_id": 4548802420,
1903+ "created_at": "2026-05-26T21:00:36Z",
1904+ "repoId": 987670088,
1905+ "pullRequestNo": 3019
1906+ },
1907+ {
1908+ "name": "gmit3",
1909+ "id": 26192089,
1910+ "comment_id": 4651029942,
1911+ "created_at": "2026-06-08T16:18:06Z",
1912+ "repoId": 987670088,
1913+ "pullRequestNo": 3096
1914+ },
1915+ {
1916+ "name": "brianjlandau",
1917+ "id": 3122,
1918+ "comment_id": 4654867087,
1919+ "created_at": "2026-06-09T00:37:02Z",
1920+ "repoId": 987670088,
1921+ "pullRequestNo": 3098
1922+ },
1923+ {
1924+ "name": "kypkk",
1925+ "id": 68454243,
1926+ "comment_id": 4687904764,
1927+ "created_at": "2026-06-12T05:55:06Z",
1928+ "repoId": 987670088,
1929+ "pullRequestNo": 3111
1930+ },
1931+ {
1932+ "name": "warmjademe",
1933+ "id": 257661268,
1934+ "comment_id": 4720070206,
1935+ "created_at": "2026-06-16T14:48:33Z",
1936+ "repoId": 987670088,
1937+ "pullRequestNo": 3131
1938+ },
1939+ {
1940+ "name": "warmjademe",
1941+ "id": 257661268,
1942+ "comment_id": 4720177856,
1943+ "created_at": "2026-06-16T14:58:33Z",
1944+ "repoId": 987670088,
1945+ "pullRequestNo": 3131
1946+ },
1947+ {
1948+ "name": "jialudev",
1949+ "id": 39230796,
1950+ "comment_id": 4725593255,
1951+ "created_at": "2026-06-17T03:26:00Z",
1952+ "repoId": 987670088,
1953+ "pullRequestNo": 3137
1954+ },
1955+ {
1956+ "name": "knight110001",
1957+ "id": 21118983,
1958+ "comment_id": 4741392218,
1959+ "created_at": "2026-06-18T11:16:02Z",
1960+ "repoId": 987670088,
1961+ "pullRequestNo": 3140
1962+ },
1963+ {
1964+ "name": "ken-jo",
1965+ "id": 42824840,
1966+ "comment_id": 4755333253,
1967+ "created_at": "2026-06-19T22:56:55Z",
1968+ "repoId": 987670088,
1969+ "pullRequestNo": 3158
1970+ },
1971+ {
1972+ "name": "xorangekiller",
1973+ "id": 5561926,
1974+ "comment_id": 4758885426,
1975+ "created_at": "2026-06-20T16:00:01Z",
1976+ "repoId": 987670088,
1977+ "pullRequestNo": 3163
1978+ },
1979+ {
1980+ "name": "sithglan",
1981+ "id": 1595655,
1982+ "comment_id": 4761251782,
1983+ "created_at": "2026-06-21T07:28:19Z",
1984+ "repoId": 987670088,
1985+ "pullRequestNo": 3168
1986+ },
1987+ {
1988+ "name": "macro-ss",
1989+ "id": 59944291,
1990+ "comment_id": 4729268228,
1991+ "created_at": "2026-06-17T11:09:03Z",
1992+ "repoId": 987670088,
1993+ "pullRequestNo": 3140
1994+ },
1995+ {
1996+ "name": "andrinoff",
1997+ "id": 175145001,
1998+ "comment_id": 4772633817,
1999+ "created_at": "2026-06-22T20:13:54Z",
2000+ "repoId": 987670088,
2001+ "pullRequestNo": 3184
2002+ },
2003+ {
2004+ "name": "calyptobai",
2005+ "id": 111788964,
2006+ "comment_id": 4774213287,
2007+ "created_at": "2026-06-22T23:56:09Z",
2008+ "repoId": 987670088,
2009+ "pullRequestNo": 3189
2010+ },
2011+ {
2012+ "name": "truffle-dev",
2013+ "id": 260125384,
2014+ "comment_id": 4783906418,
2015+ "created_at": "2026-06-23T22:07:28Z",
2016+ "repoId": 987670088,
2017+ "pullRequestNo": 3195
2018+ },
2019+ {
2020+ "name": "chardoncs",
2021+ "id": 44740171,
2022+ "comment_id": 4786221902,
2023+ "created_at": "2026-06-24T05:36:39Z",
2024+ "repoId": 987670088,
2025+ "pullRequestNo": 3197
2026+ },
2027+ {
2028+ "name": "notno",
2029+ "id": 3149184,
2030+ "comment_id": 4793889316,
2031+ "created_at": "2026-06-24T21:37:51Z",
2032+ "repoId": 987670088,
2033+ "pullRequestNo": 3202
2034+ },
2035+ {
2036+ "name": "vismaytiwari",
2037+ "id": 89745751,
2038+ "comment_id": 4797847556,
2039+ "created_at": "2026-06-25T09:38:55Z",
2040+ "repoId": 987670088,
2041+ "pullRequestNo": 3205
2042+ },
2043+ {
2044+ "name": "feizhuzheng",
2045+ "id": 130743669,
2046+ "comment_id": 4809880810,
2047+ "created_at": "2026-06-26T13:09:43Z",
2048+ "repoId": 987670088,
2049+ "pullRequestNo": 3211
2050+ },
2051+ {
2052+ "name": "syf2211",
2053+ "id": 132282304,
2054+ "comment_id": 4817246953,
2055+ "created_at": "2026-06-27T11:44:54Z",
2056+ "repoId": 987670088,
2057+ "pullRequestNo": 3221
2058+ },
2059+ {
2060+ "name": "EduardF1",
2061+ "id": 50618110,
2062+ "comment_id": 4818319813,
2063+ "created_at": "2026-06-27T14:15:50Z",
2064+ "repoId": 987670088,
2065+ "pullRequestNo": 3133
2066+ },
2067+ {
2068+ "name": "sablea",
2069+ "id": 52388727,
2070+ "comment_id": 4851979164,
2071+ "created_at": "2026-07-01T08:13:03Z",
2072+ "repoId": 987670088,
2073+ "pullRequestNo": 3235
2074+ },
2075+ {
2076+ "name": "Osamaali313",
2077+ "id": 86572800,
2078+ "comment_id": 4870561813,
2079+ "created_at": "2026-07-02T21:19:15Z",
2080+ "repoId": 987670088,
2081+ "pullRequestNo": 3244
2082+ },
2083+ {
2084+ "name": "lockp111",
2085+ "id": 28383475,
2086+ "comment_id": 4878248994,
2087+ "created_at": "2026-07-03T17:12:26Z",
2088+ "repoId": 987670088,
2089+ "pullRequestNo": 3247
2090+ },
2091+ {
2092+ "name": "TheRAWagent",
2093+ "id": 77039476,
2094+ "comment_id": 4879276761,
2095+ "created_at": "2026-07-03T20:52:00Z",
2096+ "repoId": 987670088,
2097+ "pullRequestNo": 3251
1882 }
2098 }
1883 ]
2099 ]
1884}
2100}
.github/workflows/build.yml+2−2
@@ -18,10 +18,10 @@ jobs:
18 os: [ubuntu-latest, macos-latest, windows-latest]
18 os: [ubuntu-latest, macos-latest, windows-latest]
19 runs-on: ${{ matrix.os }}
19 runs-on: ${{ matrix.os }}
20 steps:
20 steps:
21− - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
21+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
22 with:
22 with:
23 persist-credentials: false
23 persist-credentials: false
24− - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
24+ - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
25 with:
25 with:
26 go-version-file: go.mod
26 go-version-file: go.mod
27 - run: go mod tidy
27 - run: go mod tidy
.github/workflows/lint.yml+1−1
@@ -9,5 +9,5 @@ jobs:
9 uses: charmbracelet/meta/.github/workflows/lint.yml@main
9 uses: charmbracelet/meta/.github/workflows/lint.yml@main
10 with:
10 with:
11 golangci_path: .golangci.yml
11 golangci_path: .golangci.yml
12− golangci_version: v2.10
12+ golangci_version: v2.11
13 timeout: 10m
13 timeout: 10m
.github/workflows/nightly.yml+1−1
@@ -11,7 +11,7 @@ jobs:
11 outputs:
11 outputs:
12 should_run: ${{ steps.check.outputs.should_run }}
12 should_run: ${{ steps.check.outputs.should_run }}
13 steps:
13 steps:
14− - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
14+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
15 with:
15 with:
16 fetch-depth: 1
16 fetch-depth: 1
17 - id: check
17 - id: check
.github/workflows/schema-update.yml+3−3
@@ -12,15 +12,15 @@ jobs:
12 update-schema:
12 update-schema:
13 runs-on: ubuntu-latest
13 runs-on: ubuntu-latest
14 steps:
14 steps:
15− - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
15+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
16 with:
16 with:
17 token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
17 token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
18− - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
18+ - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
19 with:
19 with:
20 go-version-file: go.mod
20 go-version-file: go.mod
21 - run: go run . schema > ./schema.json
21 - run: go run . schema > ./schema.json
22 - run: go generate ./internal/agent/hyper/...
22 - run: go generate ./internal/agent/hyper/...
23− - uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # v5
23+ - uses: stefanzweifel/git-auto-commit-action@4a55954c782fc1ea30b9056cd3e7a2b40ca8887d # v5
24 with:
24 with:
25 commit_message: "chore: auto-update files"
25 commit_message: "chore: auto-update files"
26 branch: main
26 branch: main
.github/workflows/security.yml+10−10
@@ -27,14 +27,14 @@ jobs:
27 pull-requests: read
27 pull-requests: read
28 security-events: write
28 security-events: write
29 steps:
29 steps:
30− - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
30+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
31 with:
31 with:
32 persist-credentials: false
32 persist-credentials: false
33− - uses: github/codeql-action/init@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
33+ - uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
34 with:
34 with:
35 languages: ${{ matrix.language }}
35 languages: ${{ matrix.language }}
36− - uses: github/codeql-action/autobuild@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
36+ - uses: github/codeql-action/autobuild@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
37− - uses: github/codeql-action/analyze@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
37+ - uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
38
38
39 grype:
39 grype:
40 runs-on: ubuntu-latest
40 runs-on: ubuntu-latest
@@ -43,7 +43,7 @@ jobs:
43 actions: read
43 actions: read
44 contents: read
44 contents: read
45 steps:
45 steps:
46− - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
46+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
47 with:
47 with:
48 persist-credentials: false
48 persist-credentials: false
49 - uses: anchore/scan-action@e1165082ffb1fe366ebaf02d8526e7c4989ea9d2 # v7.4.0
49 - uses: anchore/scan-action@e1165082ffb1fe366ebaf02d8526e7c4989ea9d2 # v7.4.0
@@ -52,7 +52,7 @@ jobs:
52 path: "."
52 path: "."
53 fail-build: true
53 fail-build: true
54 severity-cutoff: critical
54 severity-cutoff: critical
55− - uses: github/codeql-action/upload-sarif@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
55+ - uses: github/codeql-action/upload-sarif@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
56 with:
56 with:
57 sarif_file: ${{ steps.scan.outputs.sarif }}
57 sarif_file: ${{ steps.scan.outputs.sarif }}
58
58
@@ -62,10 +62,10 @@ jobs:
62 security-events: write
62 security-events: write
63 contents: read
63 contents: read
64 steps:
64 steps:
65− - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
65+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
66 with:
66 with:
67 persist-credentials: false
67 persist-credentials: false
68− - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
68+ - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
69 with:
69 with:
70 go-version: stable
70 go-version: stable
71 - name: Install govulncheck
71 - name: Install govulncheck
@@ -73,7 +73,7 @@ jobs:
73 - name: Run govulncheck
73 - name: Run govulncheck
74 run: |
74 run: |
75 govulncheck -C . -format sarif ./... > results.sarif
75 govulncheck -C . -format sarif ./... > results.sarif
76− - uses: github/codeql-action/upload-sarif@7211b7c8077ea37d8641b6271f6a365a22a5fbfa # v4.36.0
76+ - uses: github/codeql-action/upload-sarif@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
77 with:
77 with:
78 sarif_file: results.sarif
78 sarif_file: results.sarif
79
79
@@ -83,7 +83,7 @@ jobs:
83 permissions:
83 permissions:
84 contents: read
84 contents: read
85 steps:
85 steps:
86− - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
86+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
87 with:
87 with:
88 persist-credentials: false
88 persist-credentials: false
89 - uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0
89 - uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0
.github/workflows/snapshot.yml+3−3
@@ -18,14 +18,14 @@ jobs:
18 # Use our own large runners with more CPU and RAM for faster builds
18 # Use our own large runners with more CPU and RAM for faster builds
19 group: releasers
19 group: releasers
20 steps:
20 steps:
21− - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
21+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
22 with:
22 with:
23 fetch-depth: 0
23 fetch-depth: 0
24 persist-credentials: false
24 persist-credentials: false
25− - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
25+ - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
26 with:
26 with:
27 go-version-file: go.mod
27 go-version-file: go.mod
28− - uses: goreleaser/goreleaser-action@5daf1e915a5f0af01ddbcd89a43b8061ff4f1a89 # v7.2.2
28+ - uses: goreleaser/goreleaser-action@f06c13b6b1a9625abc9e6e439d9c05a8f2190e94 # v7.2.3
29 with:
29 with:
30 version: "nightly"
30 version: "nightly"
31 distribution: goreleaser-pro
31 distribution: goreleaser-pro
.gitignore+1
@@ -44,6 +44,7 @@ Thumbs.db
44
44
45# Nix/direnv
45# Nix/direnv
46.direnv/
46.direnv/
47+/result
47
48
48**/.crush/**
49**/.crush/**
49
50
.golangci.yml+16−4
@@ -2,6 +2,7 @@ version: "2"
2linters:
2linters:
3 enable:
3 enable:
4 - bodyclose
4 - bodyclose
5+ - errcheck
5 # - exhaustive
6 # - exhaustive
6 # - goconst
7 # - goconst
7 # - godot
8 # - godot
@@ -9,6 +10,7 @@ linters:
9 # - gomoddirectives
10 # - gomoddirectives
10 - goprintffuncname
11 - goprintffuncname
11 # - gosec
12 # - gosec
13+ - ineffassign
12 - misspell
14 - misspell
13 # - nakedret
15 # - nakedret
14 # - nestif
16 # - nestif
@@ -23,20 +25,30 @@ linters:
23 - tparallel
25 - tparallel
24 # - unconvert
26 # - unconvert
25 # - unparam
27 # - unparam
28+ - unused
26 - whitespace
29 - whitespace
27 # - wrapcheck
30 # - wrapcheck
28− disable:
29− - errcheck
30− - ineffassign
31− - unused
32 exclusions:
31 exclusions:
33 generated: lax
32 generated: lax
34 presets:
33 presets:
35 - common-false-positives
34 - common-false-positives
35+ # Ignores the idiomatic-to-drop error family (*Close, *Flush,
36+ # Fprint*, os.Remove/RemoveAll, os.Setenv, stdout/stderr writes) so
37+ # errcheck only flags genuinely meaningful dropped errors.
38+ - std-error-handling
36 rules:
39 rules:
40+ # Dropped errors in tests (setup writes, httptest encoders) are
41+ # low-signal — test failures surface them anyway.
42+ - path: _test\.go
43+ linters:
44+ - errcheck
37 - text: '(slog|log)\.\w+'
45 - text: '(slog|log)\.\w+'
38 linters:
46 linters:
39 - noctx
47 - noctx
48+ - path: internal/shell/run.go
49+ text: "SA1019.*interp.ExecHandler"
50+ linters:
51+ - staticcheck
40issues:
52issues:
41 max-issues-per-linter: 0
53 max-issues-per-linter: 0
42 max-same-issues: 0
54 max-same-issues: 0
AGENTS.md+40
@@ -181,3 +181,43 @@ func TestYourFunction(t *testing.T) {
181
181
182Anytime you need to work on the TUI, read `internal/ui/AGENTS.md` before
182Anytime you need to work on the TUI, read `internal/ui/AGENTS.md` before
183starting work.
183starting work.
184+
185+## Styling System
186+
187+The styling system lives in `internal/ui/styles/` and is organized into
188+three layers:
189+
190+- **`quickstyle.go`**: The stable base theme builder. `quickStyle(opts)`
191+ constructs a `Styles` struct from `quickStyleOpts` — a palette of
192+ design tokens (primary, secondary, fgBase, bgBase, success, error, etc.).
193+ `quickStyle` must be fully token-driven: never hardcode specific
194+ `charmtone.*` colors here (except Chroma syntax highlighting, which is
195+ pending tokenization). This lets any theme reuse the base without
196+ inheriting Charmtone-specific colors.
197+- **`themes.go`**: Defines concrete themes. Each theme function (e.g.
198+ `CharmtonePantera`) calls `quickStyle` with its palette, then applies
199+ theme-specific overrides as needed.
200+- **`styles.go`**: Defines the `Styles` struct and its documentation —
201+ the shape of what `quickStyle` produces.
202+
203+**Adding theme-specific overrides**: When a style genuinely needs a
204+color that doesn't fit the token model (e.g. the bang prompt uses
205+Salt/Hazy/Larple), keep `quickStyle` on the closest semantic token and
206+override only the differing colors in the theme function:
207+
208+```go
209+func CharmtonePantera() Styles {
210+ s := quickStyle(quickStyleOpts{ /* palette */ })
211+
212+ // Override only the colors that differ from the token defaults.
213+ s.Editor.PromptBangIconFocused = s.Editor.PromptBangIconFocused.
214+ Foreground(charmtone.Salt).
215+ Background(charmtone.Hazy)
216+
217+ return s
218+}
219+```
220+
221+**Adding a new theme**: Add a function in `themes.go` that returns the
222+result of `quickStyle` with a `quickStyleOpts` palette (plus any needed
223+overrides), then wire it into `ThemeForProvider`.
README.md+65−19
@@ -1,5 +1,8 @@
1# Crush
1# Crush
2
2
3+> [!NOTE]
4+> This is a personal fork of [charmbracelet/crush](https://github.com/charmbracelet/crush) with UI/UX tweaks and performance improvements.
5+
3<p align="center">
6<p align="center">
4 <a href="https://stuff.charm.sh/crush/charm-crush.png"><img width="450" alt="Charm Crush Logo" src="https://github.com/user-attachments/assets/cf8ca3ce-8b02-43f0-9d0f-5a331488da4b" /></a><br />
7 <a href="https://stuff.charm.sh/crush/charm-crush.png"><img width="450" alt="Charm Crush Logo" src="https://github.com/user-attachments/assets/cf8ca3ce-8b02-43f0-9d0f-5a331488da4b" /></a><br />
5 <a href="https://github.com/charmbracelet/crush/releases"><img src="https://img.shields.io/github/release/charmbracelet/crush" alt="Latest Release"></a>
8 <a href="https://github.com/charmbracelet/crush/releases"><img src="https://img.shields.io/github/release/charmbracelet/crush" alt="Latest Release"></a>
@@ -194,6 +197,7 @@ That said, you can also set environment variables for preferred providers.
194| `OPENROUTER_API_KEY` | OpenRouter |
197| `OPENROUTER_API_KEY` | OpenRouter |
195| `IONET_API_KEY` | io.net |
198| `IONET_API_KEY` | io.net |
196| `ALIBABA_SINGAPORE_API_KEY` | Alibaba (Singapore) |
199| `ALIBABA_SINGAPORE_API_KEY` | Alibaba (Singapore) |
200+| `ALIBABA_US_API_KEY` | Alibaba (United States) |
197| `GROQ_API_KEY` | Groq |
201| `GROQ_API_KEY` | Groq |
198| `AVIAN_API_KEY` | Avian |
202| `AVIAN_API_KEY` | Avian |
199| `OPENCODE_API_KEY` | OpenCode Zen & Go |
203| `OPENCODE_API_KEY` | OpenCode Zen & Go |
@@ -207,6 +211,7 @@ That said, you can also set environment variables for preferred providers.
207| `AZURE_OPENAI_API_ENDPOINT` | Azure OpenAI models |
211| `AZURE_OPENAI_API_ENDPOINT` | Azure OpenAI models |
208| `AZURE_OPENAI_API_KEY` | Azure OpenAI models (optional when using Entra ID) |
212| `AZURE_OPENAI_API_KEY` | Azure OpenAI models (optional when using Entra ID) |
209| `AZURE_OPENAI_API_VERSION` | Azure OpenAI models |
213| `AZURE_OPENAI_API_VERSION` | Azure OpenAI models |
214+| `MOONSHOT_API_KEY` | Moonshot |
210
215
211### Subscriptions
216### Subscriptions
212
217
@@ -402,6 +407,33 @@ down. There is a short grace window right after `POST /v1/workspaces` so a
402client that has created the workspace but not yet opened its event stream
407client that has created the workspace but not yet opened its event stream
403does not get reaped before it can attach.
408does not get reaped before it can attach.
404
409
410+### Global context files
411+
412+Crush automatically includes two files for cross-project instructions.
413+
414+- `~/.config/crush/CRUSH.md`: Crush-specific rules that would confuse other
415+ agentic coding tools. If you only use Crush, this is the only one you need to
416+ edit.
417+- `~/.config/AGENTS.md`: generic instructions that other coding tools might
418+ read. Avoid referring to Crush-specific features or workflows here. You
419+ probably only care about this if you use multiple agentic coding tools and
420+ want to share instructions between them.
421+
422+You can customize these paths using the `global_context_paths` option in your
423+configuration:
424+
425+```jsonc
426+{
427+ "$schema": "https://charm.land/crush.json",
428+ "options": {
429+ "global_context_paths": [
430+ "~/path/to/custom/context/file.md",
431+ "/full/path/to/folder/of/files/" // recursively load all .md files in folder
432+ ]
433+ }
434+}
435+```
436+
405### Ignoring Files
437### Ignoring Files
406
438
407Crush respects `.gitignore` files by default, but you can also create a
439Crush respects `.gitignore` files by default, but you can also create a
@@ -743,9 +775,10 @@ To add specific models to the configuration, configure as such:
743
775
744### Local Models
776### Local Models
745
777
746−Local models can also be configured via OpenAI-compatible API. Here are two common examples:
778+Crush can auto-discovers models from local providers. Add a custom provider
747−
779+with `type` set to `llamacpp`, `omlx`, `lmstudio`, `litellm`, or `ollama`
748−#### Ollama
780+and leave out the models list. Crush will populate the model list
781+automatically.
749
782
750```json
783```json
751{
784{
@@ -753,37 +786,50 @@ Local models can also be configured via OpenAI-compatible API. Here are two comm
753 "ollama": {
786 "ollama": {
754 "name": "Ollama",
787 "name": "Ollama",
755 "base_url": "http://localhost:11434/v1/",
788 "base_url": "http://localhost:11434/v1/",
756− "type": "openai-compat",
789+ "type": "ollama"
757− "models": [
758− {
759− "name": "Qwen 3 30B",
760− "id": "qwen3:30b",
761− "context_window": 256000,
762− "default_max_tokens": 20000
763− }
764− ]
765 }
790 }
766 }
791 }
767}
792}
768```
793```
769
794
770−#### LM Studio
795+For llama.cpp (`llama-server`), point at the server's base URL:
771
796
772```json
797```json
773{
798{
774 "providers": {
799 "providers": {
775− "lmstudio": {
800+ "llamacpp": {
776− "name": "LM Studio",
801+ "name": "llama.cpp",
777− "base_url": "http://localhost:1234/v1/",
802+ "base_url": "http://localhost:2222",
778− "type": "openai-compat",
803+ "type": "llamacpp"
804+ }
805+ }
806+}
807+```
808+
809+#### Manual Model Configuration
810+
811+You can still list models explicitly. User-defined models always take
812+precedence over discovered ones, and any fields you set won't be overwritten
813+by auto-discovery. Auto discovery will run if the model list is empty for any
814+`openai-compat` provider or if you pass `"discover_models": true` it will merge
815+ the found models with your hand configured ones.
816+
817+```json
818+{
819+ "providers": {
820+ "ollama": {
821+ "name": "Ollama",
822+ "base_url": "http://localhost:11434/v1/",
823+ "type": "ollama",
779 "models": [
824 "models": [
780 {
825 {
781 "name": "Qwen 3 30B",
826 "name": "Qwen 3 30B",
782− "id": "qwen/qwen3-30b-a3b-2507",
827+ "id": "qwen3:30b",
783 "context_window": 256000,
828 "context_window": 256000,
784 "default_max_tokens": 20000
829 "default_max_tokens": 20000
785 }
830 }
786− ]
831+ ],
832+ "discover_models": true
787 }
833 }
788 }
834 }
789}
835}
docs/hooks/README.md+5
@@ -139,6 +139,7 @@ and project-level, with project level hooks taking precedence.
139 "hooks": {
139 "hooks": {
140 "PreToolUse": [
140 "PreToolUse": [
141 {
141 {
142+ "name": "no-rm-rf", // friendly name shown in the TUI
142 "matcher": "bash", // regex tested against the tool name
143 "matcher": "bash", // regex tested against the tool name
143 "command": "./hooks/my-hot-hook.sh", // the path to the hook
144 "command": "./hooks/my-hot-hook.sh", // the path to the hook
144 "timeout": 10, // in seconds; default 30
145 "timeout": 10, // in seconds; default 30
@@ -600,6 +601,10 @@ Each entry under a `hooks.<EventName>` array:
600
601
601```jsonc
602```jsonc
602{
603{
604+ // string. Optional. Friendly display name shown in the TUI. Falls back to
605+ // command when omitted.
606+ "name": "no-rm-rf",
607+
603 // string. Optional. Regex tested against the tool name. Omit to match all.
608 // string. Optional. Regex tested against the tool name. Omit to match all.
604 "matcher": "^bash$",
609 "matcher": "^bash$",
605
610
flake.lock+3−4
@@ -20,16 +20,15 @@
20 },
20 },
21 "nixpkgs": {
21 "nixpkgs": {
22 "locked": {
22 "locked": {
23− "lastModified": 1775423009,
23+ "lastModified": 1782964654,
24− "narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
24+ "narHash": "sha256-oqyac50OyRdni5ZK9H7ZuAJoR3LzgsOdUcbBlUsk9lg=",
25 "owner": "NixOS",
25 "owner": "NixOS",
26 "repo": "nixpkgs",
26 "repo": "nixpkgs",
27− "rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
27+ "rev": "3130a1cf8f7c794ea5a4760c3fa4c745d64ec269",
28 "type": "github"
28 "type": "github"
29 },
29 },
30 "original": {
30 "original": {
31 "owner": "NixOS",
31 "owner": "NixOS",
32− "ref": "nixos-unstable",
33 "repo": "nixpkgs",
32 "repo": "nixpkgs",
34 "type": "github"
33 "type": "github"
35 }
34 }
flake.nix+32−1
@@ -2,7 +2,7 @@
2 description = "Crush development environment";
2 description = "Crush development environment";
3
3
4 inputs = {
4 inputs = {
5− nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
5+ nixpkgs.url = "github:NixOS/nixpkgs";
6 flake-utils.url = "github:numtide/flake-utils";
6 flake-utils.url = "github:numtide/flake-utils";
7 };
7 };
8
8
@@ -14,7 +14,38 @@
14 flake-utils.lib.eachDefaultSystem (
14 flake-utils.lib.eachDefaultSystem (
15 system: let
15 system: let
16 pkgs = nixpkgs.legacyPackages.${system};
16 pkgs = nixpkgs.legacyPackages.${system};
17+ version = "devel";
17 in {
18 in {
19+ packages.default = pkgs.buildGoModule {
20+ pname = "crush";
21+ inherit version;
22+
23+ src = ./.;
24+
25+ vendorHash = null;
26+
27+ # Match the Go toolchain used in the dev shell.
28+ go = pkgs.go_1_26;
29+
30+ env.CGO_ENABLED = 0;
31+
32+ ldflags = [
33+ "-s"
34+ "-w"
35+ "-X github.com/charmbracelet/crush/internal/version.Version=${version}"
36+ ];
37+
38+ # The test suite requires network access and external tools.
39+ doCheck = false;
40+
41+ meta = {
42+ description = "Terminal-based AI coding assistant";
43+ homepage = "https://github.com/charmbracelet/crush";
44+ license = pkgs.lib.licenses.mit;
45+ mainProgram = "crush";
46+ };
47+ };
48+
18 devShells.default = pkgs.mkShell {
49 devShells.default = pkgs.mkShell {
19 buildInputs = with pkgs; [
50 buildInputs = with pkgs; [
20 # Go toolchain
51 # Go toolchain
go.mod+59−58
@@ -1,37 +1,35 @@
1module github.com/charmbracelet/crush
1module github.com/charmbracelet/crush
2
2
3−go 1.26.3
3+go 1.26.4
4
4
5require (
5require (
6− charm.land/bubbles/v2 v2.1.0
6+ charm.land/bubbles/v2 v2.1.1
7− charm.land/bubbletea/v2 v2.0.7
7+ charm.land/bubbletea/v2 v2.0.8
8− charm.land/catwalk v0.44.7
8+ charm.land/catwalk v0.49.0
9 charm.land/fang/v2 v2.0.1
9 charm.land/fang/v2 v2.0.1
10− charm.land/fantasy v0.29.0
10+ charm.land/fantasy v0.35.0
11− charm.land/glamour/v2 v2.0.0
11+ charm.land/glamour/v2 v2.0.1
12− charm.land/lipgloss/v2 v2.0.3
12+ charm.land/lipgloss/v2 v2.0.5
13 charm.land/log/v2 v2.0.0
13 charm.land/log/v2 v2.0.0
14 charm.land/x/vcr v0.1.1
14 charm.land/x/vcr v0.1.1
15 github.com/JohannesKaufmann/html-to-markdown v1.6.0
15 github.com/JohannesKaufmann/html-to-markdown v1.6.0
16 github.com/MakeNowJust/heredoc v1.0.0
16 github.com/MakeNowJust/heredoc v1.0.0
17 github.com/Microsoft/go-winio v0.6.2
17 github.com/Microsoft/go-winio v0.6.2
18 github.com/PuerkitoBio/goquery v1.12.0
18 github.com/PuerkitoBio/goquery v1.12.0
19− github.com/alecthomas/chroma/v2 v2.26.1
19+ github.com/alecthomas/chroma/v2 v2.27.0
20− github.com/atotto/clipboard v0.1.4
21− github.com/aymanbagabas/go-nativeclipboard v0.1.3
22 github.com/aymanbagabas/go-udiff v0.4.1
20 github.com/aymanbagabas/go-udiff v0.4.1
23 github.com/bmatcuk/doublestar/v4 v4.10.0
21 github.com/bmatcuk/doublestar/v4 v4.10.0
24 github.com/charlievieth/fastwalk v1.0.14
22 github.com/charlievieth/fastwalk v1.0.14
25 github.com/charmbracelet/colorprofile v0.4.3
23 github.com/charmbracelet/colorprofile v0.4.3
26− github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266
24+ github.com/charmbracelet/openai-go v0.0.0-20260617131321-5e4b9c18c4be
27− github.com/charmbracelet/ultraviolet v0.0.0-20260525132238-948f4557a654
25+ github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7
28 github.com/charmbracelet/x/ansi v0.11.7
26 github.com/charmbracelet/x/ansi v0.11.7
29 github.com/charmbracelet/x/editor v0.2.0
27 github.com/charmbracelet/x/editor v0.2.0
30 github.com/charmbracelet/x/etag v0.2.0
28 github.com/charmbracelet/x/etag v0.2.0
31 github.com/charmbracelet/x/exp/charmtone v0.0.0-20260527151214-009e6338d40d
29 github.com/charmbracelet/x/exp/charmtone v0.0.0-20260527151214-009e6338d40d
32 github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f
30 github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f
33 github.com/charmbracelet/x/exp/ordered v0.1.0
31 github.com/charmbracelet/x/exp/ordered v0.1.0
34− github.com/charmbracelet/x/exp/slice v0.0.0-20260422141420-a6cbdff8a7e2
32+ github.com/charmbracelet/x/exp/slice v0.0.0-20260622092256-25656177ba8e
35 github.com/charmbracelet/x/exp/strings v0.1.0
33 github.com/charmbracelet/x/exp/strings v0.1.0
36 github.com/charmbracelet/x/powernap v0.1.6
34 github.com/charmbracelet/x/powernap v0.1.6
37 github.com/charmbracelet/x/term v0.2.2
35 github.com/charmbracelet/x/term v0.2.2
@@ -50,14 +48,14 @@ require (
50 github.com/lucasb-eyer/go-colorful v1.4.0
48 github.com/lucasb-eyer/go-colorful v1.4.0
51 github.com/mattn/go-isatty v0.0.22
49 github.com/mattn/go-isatty v0.0.22
52 github.com/modelcontextprotocol/go-sdk v1.6.1
50 github.com/modelcontextprotocol/go-sdk v1.6.1
53− github.com/ncruces/go-sqlite3 v0.34.3
51+ github.com/ncruces/go-sqlite3 v0.35.1
54 github.com/nxadm/tail v1.4.11
52 github.com/nxadm/tail v1.4.11
55 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
53 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
56− github.com/posthog/posthog-go v1.13.1
54+ github.com/posthog/posthog-go v1.17.5
57− github.com/pressly/goose/v3 v3.27.1
55+ github.com/pressly/goose/v3 v3.27.2
58− github.com/qjebbs/go-jsons v1.0.0-alpha.5
56+ github.com/qjebbs/go-jsons v1.0.0-alpha.6
59 github.com/rivo/uniseg v0.4.7
57 github.com/rivo/uniseg v0.4.7
60− github.com/sahilm/fuzzy v0.1.2
58+ github.com/sahilm/fuzzy v0.1.3
61 github.com/sourcegraph/jsonrpc2 v0.2.1
59 github.com/sourcegraph/jsonrpc2 v0.2.1
62 github.com/spf13/cobra v1.10.2
60 github.com/spf13/cobra v1.10.2
63 github.com/stretchr/testify v1.11.1
61 github.com/stretchr/testify v1.11.1
@@ -67,13 +65,14 @@ require (
67 github.com/tidwall/sjson v1.2.5
65 github.com/tidwall/sjson v1.2.5
68 github.com/zeebo/xxh3 v1.1.0
66 github.com/zeebo/xxh3 v1.1.0
69 go.uber.org/goleak v1.3.0
67 go.uber.org/goleak v1.3.0
68+ golang.design/x/clipboard v0.8.0
70− golang.org/x/net v0.55.0
69+ golang.org/x/net v0.56.0
71− golang.org/x/sync v0.20.0
70+ golang.org/x/sync v0.21.0
72− golang.org/x/sys v0.45.0
71+ golang.org/x/sys v0.46.0
73− golang.org/x/text v0.37.0
72+ golang.org/x/text v0.38.0
74 gopkg.in/natefinch/lumberjack.v2 v2.2.1
73 gopkg.in/natefinch/lumberjack.v2 v2.2.1
75 gopkg.in/yaml.v3 v3.0.1
74 gopkg.in/yaml.v3 v3.0.1
76− modernc.org/sqlite v1.51.0
75+ modernc.org/sqlite v1.53.0
77 mvdan.cc/sh/moreinterp v0.0.0-20250902163504-3cf4fd5717a5
76 mvdan.cc/sh/moreinterp v0.0.0-20250902163504-3cf4fd5717a5
78 mvdan.cc/sh/v3 v3.13.1
77 mvdan.cc/sh/v3 v3.13.1
79)
78)
@@ -87,40 +86,41 @@ require (
87 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect
86 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect
88 github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
87 github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect
89 github.com/KyleBanks/depth v1.2.1 // indirect
88 github.com/KyleBanks/depth v1.2.1 // indirect
89+ github.com/andybalholm/brotli v1.2.1 // indirect
90 github.com/andybalholm/cascadia v1.3.3 // indirect
90 github.com/andybalholm/cascadia v1.3.3 // indirect
91+ github.com/atotto/clipboard v0.1.4 // indirect
91− github.com/aws/aws-sdk-go-v2 v1.41.9 // indirect
92+ github.com/aws/aws-sdk-go-v2 v1.42.0 // indirect
92− github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.11 // indirect
93+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 // indirect
93− github.com/aws/aws-sdk-go-v2/config v1.32.20 // indirect
94+ github.com/aws/aws-sdk-go-v2/config v1.32.25 // indirect
94− github.com/aws/aws-sdk-go-v2/credentials v1.19.19 // indirect
95+ github.com/aws/aws-sdk-go-v2/credentials v1.19.24 // indirect
95− github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.25 // indirect
96+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 // indirect
96− github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.25 // indirect
97+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 // indirect
97− github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.25 // indirect
98+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 // indirect
98− github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.26 // indirect
99+ github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 // indirect
99− github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.10 // indirect
100+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 // indirect
100− github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.25 // indirect
101+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 // indirect
101− github.com/aws/aws-sdk-go-v2/service/signin v1.1.1 // indirect
102+ github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 // indirect
102− github.com/aws/aws-sdk-go-v2/service/sso v1.30.19 // indirect
103+ github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 // indirect
103− github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.2 // indirect
104+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 // indirect
104− github.com/aws/aws-sdk-go-v2/service/sts v1.42.3 // indirect
105+ github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 // indirect
105− github.com/aws/smithy-go v1.26.0 // indirect
106+ github.com/aws/smithy-go v1.27.3 // indirect
106 github.com/aymerick/douceur v0.2.0 // indirect
107 github.com/aymerick/douceur v0.2.0 // indirect
107 github.com/bahlo/generic-list-go v0.2.0 // indirect
108 github.com/bahlo/generic-list-go v0.2.0 // indirect
108 github.com/buger/jsonparser v1.1.2 // indirect
109 github.com/buger/jsonparser v1.1.2 // indirect
109 github.com/cespare/xxhash/v2 v2.3.0 // indirect
110 github.com/cespare/xxhash/v2 v2.3.0 // indirect
110 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab // indirect
111 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab // indirect
111− github.com/charmbracelet/x/json v0.2.0 // indirect
112 github.com/charmbracelet/x/termios v0.1.1 // indirect
112 github.com/charmbracelet/x/termios v0.1.1 // indirect
113 github.com/charmbracelet/x/windows v0.2.2 // indirect
113 github.com/charmbracelet/x/windows v0.2.2 // indirect
114 github.com/cyphar/filepath-securejoin v0.6.1 // indirect
114 github.com/cyphar/filepath-securejoin v0.6.1 // indirect
115 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
115 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
116− github.com/dlclark/regexp2/v2 v2.1.1 // indirect
116+ github.com/dlclark/regexp2/v2 v2.2.1 // indirect
117 github.com/ebitengine/purego v0.10.1 // indirect
117 github.com/ebitengine/purego v0.10.1 // indirect
118 github.com/esiqveland/notify v0.13.3 // indirect
118 github.com/esiqveland/notify v0.13.3 // indirect
119− github.com/felixge/httpsnoop v1.0.4 // indirect
119+ github.com/felixge/httpsnoop v1.1.0 // indirect
120 github.com/fsnotify/fsnotify v1.9.0 // indirect
120 github.com/fsnotify/fsnotify v1.9.0 // indirect
121 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
121 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
122 github.com/go-git/go-billy/v5 v5.9.0 // indirect
122 github.com/go-git/go-billy/v5 v5.9.0 // indirect
123− github.com/go-json-experiment/json v0.0.0-20260520185125-572e7c383686 // indirect
123+ github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68 // indirect
124 github.com/go-logfmt/logfmt v0.6.0 // indirect
124 github.com/go-logfmt/logfmt v0.6.0 // indirect
125 github.com/go-logr/logr v1.4.3 // indirect
125 github.com/go-logr/logr v1.4.3 // indirect
126 github.com/go-logr/stdr v1.2.2 // indirect
126 github.com/go-logr/stdr v1.2.2 // indirect
@@ -137,7 +137,7 @@ require (
137 github.com/google/go-cmp v0.7.0 // indirect
137 github.com/google/go-cmp v0.7.0 // indirect
138 github.com/google/jsonschema-go v0.4.3 // indirect
138 github.com/google/jsonschema-go v0.4.3 // indirect
139 github.com/google/s2a-go v0.1.9 // indirect
139 github.com/google/s2a-go v0.1.9 // indirect
140− github.com/googleapis/enterprise-certificate-proxy v0.3.16 // indirect
140+ github.com/googleapis/enterprise-certificate-proxy v0.3.17 // indirect
141 github.com/googleapis/gax-go/v2 v2.22.0 // indirect
141 github.com/googleapis/gax-go/v2 v2.22.0 // indirect
142 github.com/gorilla/css v1.0.1 // indirect
142 github.com/gorilla/css v1.0.1 // indirect
143 github.com/gorilla/websocket v1.5.3 // indirect
143 github.com/gorilla/websocket v1.5.3 // indirect
@@ -147,15 +147,13 @@ require (
147 github.com/jackmordaunt/icns/v3 v3.0.1 // indirect
147 github.com/jackmordaunt/icns/v3 v3.0.1 // indirect
148 github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
148 github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
149 github.com/josharian/intern v1.0.0 // indirect
149 github.com/josharian/intern v1.0.0 // indirect
150− github.com/kaptinlin/go-i18n v0.4.9 // indirect
151− github.com/kaptinlin/jsonpointer v0.4.25 // indirect
150+ github.com/kaptinlin/jsonpointer v0.4.26 // indirect
152− github.com/kaptinlin/jsonschema v0.7.15 // indirect
151+ github.com/kaptinlin/jsonschema v0.9.2 // indirect
153− github.com/kaptinlin/messageformat-go v0.6.4 // indirect
154 github.com/klauspost/compress v1.18.6 // indirect
152 github.com/klauspost/compress v1.18.6 // indirect
155 github.com/klauspost/cpuid/v2 v2.3.0 // indirect
153 github.com/klauspost/cpuid/v2 v2.3.0 // indirect
156 github.com/klauspost/pgzip v1.2.6 // indirect
154 github.com/klauspost/pgzip v1.2.6 // indirect
157 github.com/mailru/easyjson v0.7.7 // indirect
155 github.com/mailru/easyjson v0.7.7 // indirect
158− github.com/mattn/go-runewidth v0.0.23 // indirect
156+ github.com/mattn/go-runewidth v0.0.24 // indirect
159 github.com/mfridman/interpolate v0.0.2 // indirect
157 github.com/mfridman/interpolate v0.0.2 // indirect
160 github.com/microcosm-cc/bluemonday v1.0.27 // indirect
158 github.com/microcosm-cc/bluemonday v1.0.27 // indirect
161 github.com/mitchellh/mapstructure v1.5.0 // indirect
159 github.com/mitchellh/mapstructure v1.5.0 // indirect
@@ -164,7 +162,7 @@ require (
164 github.com/muesli/mango-cobra v1.2.0 // indirect
162 github.com/muesli/mango-cobra v1.2.0 // indirect
165 github.com/muesli/mango-pflag v0.1.0 // indirect
163 github.com/muesli/mango-pflag v0.1.0 // indirect
166 github.com/muesli/roff v0.1.0 // indirect
164 github.com/muesli/roff v0.1.0 // indirect
167− github.com/ncruces/go-sqlite3-wasm/v2 v2.5.35301 // indirect
165+ github.com/ncruces/go-sqlite3-wasm/v3 v3.1.35302 // indirect
168 github.com/ncruces/go-strftime v1.0.0 // indirect
166 github.com/ncruces/go-strftime v1.0.0 // indirect
169 github.com/ncruces/julianday v1.0.0 // indirect
167 github.com/ncruces/julianday v1.0.0 // indirect
170 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
168 github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
@@ -197,24 +195,27 @@ require (
197 go.opentelemetry.io/otel/trace v1.44.0 // indirect
195 go.opentelemetry.io/otel/trace v1.44.0 // indirect
198 go.uber.org/multierr v1.11.0 // indirect
196 go.uber.org/multierr v1.11.0 // indirect
199 go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect
197 go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect
198+ golang.design/x/x11 v0.2.0 // indirect
200− golang.org/x/crypto v0.52.0 // indirect
199+ golang.org/x/crypto v0.53.0 // indirect
201 golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
200 golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
201+ golang.org/x/exp/shiny v0.0.0-20250606033433-dcc06ee1d476 // indirect
202− golang.org/x/image v0.38.0 // indirect
202+ golang.org/x/image v0.43.0 // indirect
203+ golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f // indirect
203− golang.org/x/mod v0.35.0 // indirect
204+ golang.org/x/mod v0.36.0 // indirect
204 golang.org/x/oauth2 v0.36.0 // indirect
205 golang.org/x/oauth2 v0.36.0 // indirect
205− golang.org/x/term v0.43.0 // indirect
206+ golang.org/x/term v0.44.0 // indirect
206 golang.org/x/time v0.15.0 // indirect
207 golang.org/x/time v0.15.0 // indirect
207− golang.org/x/tools v0.44.0 // indirect
208+ golang.org/x/tools v0.45.0 // indirect
208− google.golang.org/api v0.282.0 // indirect
209+ google.golang.org/api v0.286.0 // indirect
209− google.golang.org/genai v1.58.0 // indirect
210+ google.golang.org/genai v1.62.0 // indirect
210− google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect
211+ google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d // indirect
211 google.golang.org/grpc v1.81.1 // indirect
212 google.golang.org/grpc v1.81.1 // indirect
212 google.golang.org/protobuf v1.36.11 // indirect
213 google.golang.org/protobuf v1.36.11 // indirect
213 gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect
214 gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect
214 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
215 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
215 gopkg.in/warnings.v0 v0.1.2 // indirect
216 gopkg.in/warnings.v0 v0.1.2 // indirect
216 gopkg.in/yaml.v2 v2.4.0 // indirect
217 gopkg.in/yaml.v2 v2.4.0 // indirect
217− modernc.org/libc v1.72.3 // indirect
218+ modernc.org/libc v1.73.4 // indirect
218 modernc.org/mathutil v1.7.1 // indirect
219 modernc.org/mathutil v1.7.1 // indirect
219 modernc.org/memory v1.11.0 // indirect
220 modernc.org/memory v1.11.0 // indirect
220)
221)
go.sum+126−124
@@ -1,17 +1,17 @@
1−charm.land/bubbles/v2 v2.1.0 h1:YSnNh5cPYlYjPxRrzs5VEn3vwhtEn3jVGRBT3M7/I0g=
1+charm.land/bubbles/v2 v2.1.1 h1:7r55WzBxpo/R3z98hGmY7KKPd3ET6vsf0Fb9sDHOV60=
2−charm.land/bubbles/v2 v2.1.0/go.mod h1:l97h4hym2hvWBVfmJDtrEHHCtkIKeTEb3TTJ4ZOB3wY=
2+charm.land/bubbles/v2 v2.1.1/go.mod h1:GE6M31gaWZVXzGw73OeuTTgy4lX+OtkH0E5ymnNsHxo=
3−charm.land/bubbletea/v2 v2.0.7 h1:7qw2tTAVar7m7klOPBYfTB0mniv/RuexsYwMRNxSeL0=
3+charm.land/bubbletea/v2 v2.0.8 h1:SxTJMhCAI3lbPmy4SgX5LWZ24AdINr4I6UEqzZvYJuY=
4−charm.land/bubbletea/v2 v2.0.7/go.mod h1:DGW2q8gvzHnOpMpZTORs0aySVHCox5C+2Svk0fci1qs=
4+charm.land/bubbletea/v2 v2.0.8/go.mod h1:2SkdgoTXluXJHOUwAoRlRXF/28vklb1rFl6GcgV1/ss=
5−charm.land/catwalk v0.44.7 h1:OmVQnuML+QkGcGXaDiu37FIg3v4OqlOH4yJDyiXCWS8=
5+charm.land/catwalk v0.49.0 h1:pXcHh9H76VvwGqPYMZhJe5vRqMLpzGsv0anJArKw70g=
6−charm.land/catwalk v0.44.7/go.mod h1:dtK2+UfdsFJgIriRPodMsSJw0XefrFOq6fdvuS57v3s=
6+charm.land/catwalk v0.49.0/go.mod h1:bw6/oiChsa9Fkr8LgYn84KrbbJY2z1+m7Jmlmmv3B2A=
7charm.land/fang/v2 v2.0.1 h1:zQCM8JQJ1JnQX/66B5jlCYBUxL2as5JXQZ2KJ6EL0mY=
7charm.land/fang/v2 v2.0.1 h1:zQCM8JQJ1JnQX/66B5jlCYBUxL2as5JXQZ2KJ6EL0mY=
8charm.land/fang/v2 v2.0.1/go.mod h1:S1GmkpcvK+OB5w9caywUnJcsMew45Ot8FXqoz8ALrII=
8charm.land/fang/v2 v2.0.1/go.mod h1:S1GmkpcvK+OB5w9caywUnJcsMew45Ot8FXqoz8ALrII=
9−charm.land/fantasy v0.29.0 h1:Xev3+7OsYjQ+la8Qvit6SrZq4fGhatF9dbaH3fpB7Ro=
9+charm.land/fantasy v0.35.0 h1:iFES7cnt3/o20T01+y2PDkHj5dHEWRFQH0vSXYzV8xo=
10−charm.land/fantasy v0.29.0/go.mod h1:U7jlcQqI1NrMOLZtYEQ6XjR7rmcy8PBhY6PxKxZ9HC8=
10+charm.land/fantasy v0.35.0/go.mod h1:rUqUhunz+c6k66L0hHd51CrXB3SSzPNKkwBrzIe6XnY=
11−charm.land/glamour/v2 v2.0.0 h1:IDBoqLEy7Hdpb9VOXN+khLP/XSxtJy1VsHuW/yF87+U=
11+charm.land/glamour/v2 v2.0.1 h1:xl+r00A4aJWU0z8fgwKd9fQQ4rsphqGUzuEiXZP5n+c=
12−charm.land/glamour/v2 v2.0.0/go.mod h1:kjq9WB0s8vuUYZNYey2jp4Lgd9f4cKdzAw88FZtpj/w=
12+charm.land/glamour/v2 v2.0.1/go.mod h1:jo9z8XqVKPeEFMVdvCRLGk++RyJ3CdUwgNr7EvXLw3k=
13−charm.land/lipgloss/v2 v2.0.3 h1:yM2zJ4Cf5Y51b7RHIwioil4ApI/aypFXXVHSwlM6RzU=
13+charm.land/lipgloss/v2 v2.0.5 h1:kbNxgeeUOYv5J0YdpxFjfvf3dFvqH8Aci4zB6xqFtrY=
14−charm.land/lipgloss/v2 v2.0.3/go.mod h1:7myLU9iG/3xluAWzpY/fSxYYHCgoKTie7laxk6ATwXA=
14+charm.land/lipgloss/v2 v2.0.5/go.mod h1:9oqhxt4yxIMe6q5A4kHr44DremZk7J9UNh74GlWa5nc=
15charm.land/log/v2 v2.0.0 h1:SY3Cey7ipx86/MBXQHwsguOT6X1exT94mmJRdzTNs+s=
15charm.land/log/v2 v2.0.0 h1:SY3Cey7ipx86/MBXQHwsguOT6X1exT94mmJRdzTNs+s=
16charm.land/log/v2 v2.0.0/go.mod h1:c3cZSRqm20qUVVAR1WmS/7ab8bgha3C6G7DjPcaVZz0=
16charm.land/log/v2 v2.0.0/go.mod h1:c3cZSRqm20qUVVAR1WmS/7ab8bgha3C6G7DjPcaVZz0=
17charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q=
17charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q=
@@ -47,47 +47,47 @@ github.com/PuerkitoBio/goquery v1.12.0 h1:pAcL4g3WRXekcB9AU/y1mbKez2dbY2AajVhtkO
47github.com/PuerkitoBio/goquery v1.12.0/go.mod h1:802ej+gV2y7bbIhOIoPY5sT183ZW0YFofScC4q/hIpQ=
47github.com/PuerkitoBio/goquery v1.12.0/go.mod h1:802ej+gV2y7bbIhOIoPY5sT183ZW0YFofScC4q/hIpQ=
48github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
48github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
49github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
49github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
50−github.com/alecthomas/chroma/v2 v2.26.1 h1:2X21EdxGZNv5GF9mG5u+uzc02GCFyGxbcBm3Grd9A78=
50+github.com/alecthomas/chroma/v2 v2.27.0 h1:FodwmyOBgJULFYmDqibcp9pvfDLWdtPRh9v/r5BXYZs=
51−github.com/alecthomas/chroma/v2 v2.26.1/go.mod h1:lxhRRa9H4hPmRLOOdYga4zkQIQjq3dtrrdwQeCfu78Y=
51+github.com/alecthomas/chroma/v2 v2.27.0/go.mod h1:NjJ3ciIgrqBNeIkWZ4e46nseoLDslxU1LmfCoL+wcY8=
52github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs=
52github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs=
53github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
53github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
54+github.com/andybalholm/brotli v1.2.1 h1:R+f5xP285VArJDRgowrfb9DqL18yVK0gKAW/F+eTWro=
55+github.com/andybalholm/brotli v1.2.1/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
54github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
56github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
55github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
57github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM=
56github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
58github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA=
57github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
59github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
58github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
60github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
59−github.com/aws/aws-sdk-go-v2 v1.41.9 h1:/rYeyO2+HrMztAmxAq9++XJtFMqSIpSsNA0yDGALYq4=
61+github.com/aws/aws-sdk-go-v2 v1.42.0 h1:XvXMJTkFQtpBKIWZnmr9ZEOc2InWM2yldjXEJ/bymhA=
60−github.com/aws/aws-sdk-go-v2 v1.41.9/go.mod h1:+HsoOEX80qAVUitj1A2DhCNTjmb3edVyuDypb6LNEeo=
62+github.com/aws/aws-sdk-go-v2 v1.42.0/go.mod h1:27+ACypSLljLAEKsCYOmrjKh83vuTRkuAe9Uv/3A4bg=
61−github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.11 h1:h5+3VT69KUBK24grGuuA5saDJTj2IIjLb9au668Fo5I=
63+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13 h1:p1BBrg/Hhp6uK7zpejeI8QFXHJeC/mynzi04Sl03k9g=
62−github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.11/go.mod h1:dnakxebH6UwFvcvujL0LVggYQ8nEvBGjU4G/V79Nv94=
64+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.13/go.mod h1:8cIfkE9MDhkRZGpQ22aV6/lkYeYSozpz16Smrs5x4Ls=
63−github.com/aws/aws-sdk-go-v2/config v1.32.20 h1:8VMDnWc/kEzxsI/1ngGM9mG81a8IGmIHD8KLcYGwagc=
65+github.com/aws/aws-sdk-go-v2/config v1.32.25 h1:ACCejvStYoilgwrfegSt5ZntCbPrk52qfwyNcnl3omM=
64−github.com/aws/aws-sdk-go-v2/config v1.32.20/go.mod h1:PuwEpciweIXGULWeOeSTXtSbH4CW9mWdWrhdCKQI1sM=
66+github.com/aws/aws-sdk-go-v2/config v1.32.25/go.mod h1:LJyU8sDRbXUxFn8xMJIGP+v9QYYwveNLI8a/giAOiAs=
65−github.com/aws/aws-sdk-go-v2/credentials v1.19.19 h1:yuFzSV1U0aRNYCQGVaTY2zW2M/L93pYHnXnrJUphYhU=
67+github.com/aws/aws-sdk-go-v2/credentials v1.19.24 h1:2hQqYCV9yqyePQ9o6dCrZc/zO8U3TwPr9mIKlZnPu/I=
66−github.com/aws/aws-sdk-go-v2/credentials v1.19.19/go.mod h1:7y63L1kGzeoDlJaQ3Z578KrnmfBut96JjvJUzGwR+YE=
68+github.com/aws/aws-sdk-go-v2/credentials v1.19.24/go.mod h1:IDwpACtwqHLISdzfwUUNq4P9DsB/h5BLg4FwJPNfqFY=
67−github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.25 h1:0w6dCiO8iez+YKwRhRBlL1CH/E3GTfdkuzrwj1by8vo=
69+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29 h1:r6qZHbT+wxgWO/e9vYNUEtg7lv5+UN3pRqKhLXvnArg=
68−github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.25/go.mod h1:9FDWUothyr5RCRAHc45XOiVCzUR8n/IhCYX+uVqw6vk=
70+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.29/go.mod h1:QRnaRcTVGKPGRy8w78HMQtKUGRYcnMZAANATkeVA6Mo=
69−github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.25 h1:Uii3frf9ztec/ABM2/FSH9/z7PLzxfpG8h4RpkUFflQ=
71+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29 h1:f3vKqSo13fhTYb+JEcXwXefZQE26I1FB5eTSniU67ko=
70−github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.25/go.mod h1:G6kntsA2GorAxDPbap6xgB2F+amSLUF8GJTi7PUoX44=
72+github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.29/go.mod h1:MzoLFUArKGpGD+ukmPiTPG1X5x4o6M2kq4v2dr1FiEc=
71−github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.25 h1:r1+/l6m+WaUJF9HISEsNOLHSNj5EXYQxK8VX6Cz9NlA=
73+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29 h1:RdwIf/CuUsvJX3RgJagbOyotl/cxoLY4xviKuE7p2GY=
72−github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.25/go.mod h1:cKf+D+NMDK1LndD7BowHbBZPgR9V0/5HubH0PFWvA+c=
74+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.29/go.mod h1:71wt8W2EgswdZy9Mf9KNnzxZ3TiZlv4caKghPktDOkA=
73−github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.26 h1:A1PmWU2zfkIm9EyFlJncFXL4W4phML+h8KjltUsCvNQ=
75+github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30 h1:VTGy885W5DKBxWRUJbym9hytNaYzsyaPkCHGRRMAOhU=
74−github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.26/go.mod h1:dY4MRzXEizrD4hqtpKvWVGPX7QleSGGVY+EBolo1RmM=
76+github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.30/go.mod h1:AS0HycUvJRFvTt613AYDOgO2jzw+00cVSMny8XB3yMY=
75−github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.10 h1:d5/908OJ4bXg8lyjeMPvXetEKqoDoLi5Owy1zNue3yg=
77+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12 h1:ZD2+BSw9vFsNlKYIasSNt3uDbjqqXIBcM13UJv/Lx2k=
76−github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.10/go.mod h1:a57l7Hwh+FWI+we50g5NPJHYUKeJKfXbc4w8SyXu8Ig=
78+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.12/go.mod h1:Ms4zlcVBbXbiP7EVLhl+lgjvA/a7YphqQ3Ih3174EmI=
77−github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.25 h1:dD3dhHNglpd98gs72my22Ndqi1hqQGllFFg1F+twfxg=
79+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29 h1:DRebniUGZ2MqiiIVmQJ04vIXr918hubdHMnarSLEWyU=
78−github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.25/go.mod h1:0yAbjPfd64gG7mj85RW+fMEYdfBgCRZw8g/oWcL1pjc=
80+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.29/go.mod h1:LfRkPCD8YHDM2E5eTkos2UpwYeZnBcVarTa8L59bJHA=
79−github.com/aws/aws-sdk-go-v2/service/signin v1.1.1 h1:1VwbP3qMNfxUDEXWki4rCE5iA+44VA1lokTz9HasGzw=
81+github.com/aws/aws-sdk-go-v2/service/signin v1.2.0 h1:3nXpRcFwRCW8n7HgO2QGy0Dc20eQNfBuUemGQhpF8m8=
80−github.com/aws/aws-sdk-go-v2/service/signin v1.1.1/go.mod h1:vUtyoSj0OPji3kjIVSc/GlKuWEiL33f/WFxl6dmpy/A=
82+github.com/aws/aws-sdk-go-v2/service/signin v1.2.0/go.mod h1:LxYujSTLPRlp2vTtcUO/+1ilrew8ytt6SvQyOgejzFQ=
81−github.com/aws/aws-sdk-go-v2/service/sso v1.30.19 h1:N6pIsdFOW1Kd9S4KyFKXdGRBojPPxkP32+uHFWLv4Hc=
83+github.com/aws/aws-sdk-go-v2/service/sso v1.31.3 h1:ey1XLTYXb9PcLt4535632o5kCGXNXEhNb620Dqwuylo=
82−github.com/aws/aws-sdk-go-v2/service/sso v1.30.19/go.mod h1:3gt5WJArFooNmyLONS+h/R4J+o86II8du38IgCwj9dE=
84+github.com/aws/aws-sdk-go-v2/service/sso v1.31.3/go.mod h1:Lk7PlmoTYryQmyBG0EXqj5BcUbj3whXdU2s3yGI3EAc=
83−github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.2 h1:hc+lBYiiTr8Zk4MTzIsQ92MeDWCIDvWGmzKUWOaBcOg=
85+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6 h1:yLr03zQE/5Eu5l3QU0Si+xMbLMbSDF2YXsigqXngs6g=
84−github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.2/go.mod h1:hU6fqB3OJA6/ePheD47LQnxvjYk6br6PtQxs+Q9ojvk=
86+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.6/go.mod h1:Q5N6icH+KJZDLh+ESNwzdv6cZ6vLFF/egy3IOxWhmz4=
85−github.com/aws/aws-sdk-go-v2/service/sts v1.42.3 h1:ErklX/7uhSbkAAeyQD/Y1OoQ9hO3SJXQNEgksORW3Js=
87+github.com/aws/aws-sdk-go-v2/service/sts v1.43.3 h1:VrIhKRCSK1umelSgB9RghvA9RTUYeQffyAS5ApXehNI=
86−github.com/aws/aws-sdk-go-v2/service/sts v1.42.3/go.mod h1:ULe4HCzfKPiR6R3HEurE3b1upEkuk8AkMrOKtaOxKO8=
88+github.com/aws/aws-sdk-go-v2/service/sts v1.43.3/go.mod h1:r8wkDOuLaaMFqFiYAb8dGY2A3gJCOujMc6CFOVC4Zhc=
87−github.com/aws/smithy-go v1.26.0 h1:9ouqbi+NyKP7fV3Te7UElCwdAb6Y8uk7LGwPE5tVe/s=
89+github.com/aws/smithy-go v1.27.3 h1:F3Zb497UhhskkfpJmfkXswyo+t0sh9OTBnIHjogWbVY=
88−github.com/aws/smithy-go v1.26.0/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
90+github.com/aws/smithy-go v1.27.3/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
89−github.com/aymanbagabas/go-nativeclipboard v0.1.3 h1:FmAWHPTwneAixu7uGDn3cL42xPlUCdNp2J8egMn3P1k=
90−github.com/aymanbagabas/go-nativeclipboard v0.1.3/go.mod h1:2o7MyZwwi4pmXXpOpvOS5FwaHyoCIUks0ktjUvB0EoE=
91github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ12Gv5o=
91github.com/aymanbagabas/go-udiff v0.4.1 h1:OEIrQ8maEeDBXQDoGCbbTTXYJMYRCRO1fnodZ12Gv5o=
92github.com/aymanbagabas/go-udiff v0.4.1/go.mod h1:0L9PGwj20lrtmEMeyw4WKJ/TMyDtvAoK9bf2u/mNo3w=
92github.com/aymanbagabas/go-udiff v0.4.1/go.mod h1:0L9PGwj20lrtmEMeyw4WKJ/TMyDtvAoK9bf2u/mNo3w=
93github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
93github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk=
@@ -106,10 +106,10 @@ github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab h1:
106github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab/go.mod h1:hqlYqR7uPKOKfnNeicUbZp0Ps0GeYFlKYtwh5HGDCx8=
106github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab/go.mod h1:hqlYqR7uPKOKfnNeicUbZp0Ps0GeYFlKYtwh5HGDCx8=
107github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q=
107github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q=
108github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q=
108github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q=
109−github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 h1:BW/sZtyd1JyYy0h5adMm3tzpNyL857LWjuTRET6OhpY=
109+github.com/charmbracelet/openai-go v0.0.0-20260617131321-5e4b9c18c4be h1:pg+OWlIkk9HOe/8P5J95aKe2wGDzFUiiyFOUpwR30B4=
110−github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266/go.mod h1:1DahUaExbUZx/jD+FNT2PKP4L9rLE5+ZBRuI8mZjd/E=
110+github.com/charmbracelet/openai-go v0.0.0-20260617131321-5e4b9c18c4be/go.mod h1:1DahUaExbUZx/jD+FNT2PKP4L9rLE5+ZBRuI8mZjd/E=
111−github.com/charmbracelet/ultraviolet v0.0.0-20260525132238-948f4557a654 h1:FpSYhY28ucg9ZRr+2wj67FAQ0Ey5yiK0072PmRDJNek=
111+github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7 h1:3FmWoGNWK4STvqg0O0Aeav2T7rodWJAPeF0QpH+8gFw=
112−github.com/charmbracelet/ultraviolet v0.0.0-20260525132238-948f4557a654/go.mod h1:hFpumms29Smx3LStRfku8vcCTBe1Kq8aCXtHUJa3mjY=
112+github.com/charmbracelet/ultraviolet v0.0.0-20260703014108-f5a850f9c2b7/go.mod h1:f/jRa757WUmaOZrbPspXymbg/GnbF+rwe4OLsG7aXYo=
113github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI=
113github.com/charmbracelet/x/ansi v0.11.7 h1:kzv1kJvjg2S3r9KHo8hDdHFQLEqn4RBCb39dAYC84jI=
114github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ=
114github.com/charmbracelet/x/ansi v0.11.7/go.mod h1:9qGpnAVYz+8ACONkZBUWPtL7lulP9No6p1epAihUZwQ=
115github.com/charmbracelet/x/editor v0.2.0 h1:7XLUKtaRaB8jN7bWU2p2UChiySyaAuIfYiIRg8gGWwk=
115github.com/charmbracelet/x/editor v0.2.0 h1:7XLUKtaRaB8jN7bWU2p2UChiySyaAuIfYiIRg8gGWwk=
@@ -122,12 +122,10 @@ github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f h1:pk6g
122github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f/go.mod h1:IfZAMTHB6XkZSeXUqriemErjAWCCzT0LwjKFYCZyw0I=
122github.com/charmbracelet/x/exp/golden v0.0.0-20250806222409-83e3a29d542f/go.mod h1:IfZAMTHB6XkZSeXUqriemErjAWCCzT0LwjKFYCZyw0I=
123github.com/charmbracelet/x/exp/ordered v0.1.0 h1:55/qLwjIh0gL0Vni+QAWk7T/qRVP6sBf+2agPBgnOFE=
123github.com/charmbracelet/x/exp/ordered v0.1.0 h1:55/qLwjIh0gL0Vni+QAWk7T/qRVP6sBf+2agPBgnOFE=
124github.com/charmbracelet/x/exp/ordered v0.1.0/go.mod h1:5UHwmG+is5THxMyCJHNPCn2/ecI07aKNrW+LcResjJ8=
124github.com/charmbracelet/x/exp/ordered v0.1.0/go.mod h1:5UHwmG+is5THxMyCJHNPCn2/ecI07aKNrW+LcResjJ8=
125−github.com/charmbracelet/x/exp/slice v0.0.0-20260422141420-a6cbdff8a7e2 h1:EXQ7j9kQUGILoSIbxrr1osK9Ca3xqc6EJ7710FIiI3U=
125+github.com/charmbracelet/x/exp/slice v0.0.0-20260622092256-25656177ba8e h1:TerxTCW/3BrnpqKxeouW0cWSjZb7PsVAmtNftRAAFRE=
126−github.com/charmbracelet/x/exp/slice v0.0.0-20260422141420-a6cbdff8a7e2/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA=
126+github.com/charmbracelet/x/exp/slice v0.0.0-20260622092256-25656177ba8e/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA=
127github.com/charmbracelet/x/exp/strings v0.1.0 h1:i69S2XI7uG1u4NLGeJPSYU++Nmjvpo9nwd6aoEm7gkA=
127github.com/charmbracelet/x/exp/strings v0.1.0 h1:i69S2XI7uG1u4NLGeJPSYU++Nmjvpo9nwd6aoEm7gkA=
128github.com/charmbracelet/x/exp/strings v0.1.0/go.mod h1:/ehtMPNh9K4odGFkqYJKpIYyePhdp1hLBRvyY4bWkH8=
128github.com/charmbracelet/x/exp/strings v0.1.0/go.mod h1:/ehtMPNh9K4odGFkqYJKpIYyePhdp1hLBRvyY4bWkH8=
129−github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQANTPrQ=
130−github.com/charmbracelet/x/json v0.2.0/go.mod h1:opFIflx2YgXgi49xVUu8gEQ21teFAxyMwvOiZhIvWNM=
131github.com/charmbracelet/x/powernap v0.1.6 h1:tsnQWQVl9arYm5S/tQVXuMJcvnkUNNkXhBWlEBDRNqM=
129github.com/charmbracelet/x/powernap v0.1.6 h1:tsnQWQVl9arYm5S/tQVXuMJcvnkUNNkXhBWlEBDRNqM=
132github.com/charmbracelet/x/powernap v0.1.6/go.mod h1:cmdl5zlP5mR8TF2Y68UKc7hdGUDiSJ2+4hk0h04Hsx4=
130github.com/charmbracelet/x/powernap v0.1.6/go.mod h1:cmdl5zlP5mR8TF2Y68UKc7hdGUDiSJ2+4hk0h04Hsx4=
133github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
131github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk=
@@ -156,8 +154,8 @@ github.com/denisbrodbeck/machineid v1.0.1 h1:geKr9qtkB876mXguW2X6TU4ZynleN6ezuMS
156github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
154github.com/denisbrodbeck/machineid v1.0.1/go.mod h1:dJUwb7PTidGDeYyUBmXZ2GphQBbjJCrnectwCyxcUSI=
157github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
155github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c=
158github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
156github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4=
159−github.com/dlclark/regexp2/v2 v2.1.1 h1:LCUGyd9Wf+r+VVOl8Ny38JTpWJcAsdVnCIuhhtthmKw=
157+github.com/dlclark/regexp2/v2 v2.2.1 h1:mf4KkFUj0gJuarK8P+LgiS+Lit7m9N1yAwEfPbee7R0=
160−github.com/dlclark/regexp2/v2 v2.1.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU=
158+github.com/dlclark/regexp2/v2 v2.2.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU=
161github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
159github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
162github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
160github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
163github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
161github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
@@ -171,8 +169,8 @@ github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMD
171github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0=
169github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0=
172github.com/esiqveland/notify v0.13.3 h1:QCMw6o1n+6rl+oLUfg8P1IIDSFsDEb2WlXvVvIJbI/o=
170github.com/esiqveland/notify v0.13.3 h1:QCMw6o1n+6rl+oLUfg8P1IIDSFsDEb2WlXvVvIJbI/o=
173github.com/esiqveland/notify v0.13.3/go.mod h1:hesw/IRYTO0x99u1JPweAl4+5mwXJibQVUcP0Iu5ORE=
171github.com/esiqveland/notify v0.13.3/go.mod h1:hesw/IRYTO0x99u1JPweAl4+5mwXJibQVUcP0Iu5ORE=
174−github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
172+github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc=
175−github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
173+github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE=
176github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
174github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
177github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
175github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
178github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
176github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
@@ -184,8 +182,8 @@ github.com/go-git/go-billy/v5 v5.9.0 h1:jItGXszUDRtR/AlferWPTMN4j38BQ88XnXKbilmm
184github.com/go-git/go-billy/v5 v5.9.0/go.mod h1:jCnQMLj9eUgGU7+ludSTYoZL/GGmii14RxKFj7ROgHw=
182github.com/go-git/go-billy/v5 v5.9.0/go.mod h1:jCnQMLj9eUgGU7+ludSTYoZL/GGmii14RxKFj7ROgHw=
185github.com/go-git/go-git/v5 v5.19.1 h1:nX27AnaU43/K5bKktKwgBmR9lawoYVe1Ckg0rgzzN00=
183github.com/go-git/go-git/v5 v5.19.1 h1:nX27AnaU43/K5bKktKwgBmR9lawoYVe1Ckg0rgzzN00=
186github.com/go-git/go-git/v5 v5.19.1/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ=
184github.com/go-git/go-git/v5 v5.19.1/go.mod h1:Pb1v0c7/g8aGQJwx9Us09W85yGoyvSwuhEGMH7zjDKQ=
187−github.com/go-json-experiment/json v0.0.0-20260520185125-572e7c383686 h1:NZBJxCpbHS1gzS6xAmyxbJznosZIIPk9IB42v62UvKA=
185+github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68 h1:KZaTBSyshWX3MP5jukJcNSuXDQTO+rNpt0J564dX/eg=
188−github.com/go-json-experiment/json v0.0.0-20260520185125-572e7c383686/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg=
186+github.com/go-json-experiment/json v0.0.0-20260623181947-01eb4420fa68/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg=
189github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
187github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
190github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
188github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
191github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
189github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
@@ -233,8 +231,8 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
233github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
231github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
234github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
232github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
235github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
233github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
236−github.com/googleapis/enterprise-certificate-proxy v0.3.16 h1:F/VPrx0YPBdksZJQdCAp0WUsqnNmZpUZszzfYt0M5Dw=
234+github.com/googleapis/enterprise-certificate-proxy v0.3.17 h1:73NfMHdiqo9JFU9+7a5ExpVa10/R29pXfZIaW559nrg=
237−github.com/googleapis/enterprise-certificate-proxy v0.3.16/go.mod h1:9Yb0eAkH/Xqhvv3zbeKf/+wMJqCeocWc6KIhDvEAuYE=
235+github.com/googleapis/enterprise-certificate-proxy v0.3.17/go.mod h1:rSEsBUemEBZEexP2y6jPp16LUmUbjmSbcPMQizR0o4k=
238github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4=
236github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4=
239github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY=
237github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY=
240github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
238github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
@@ -264,14 +262,10 @@ github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d h1:o
264github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d/go.mod h1:SV0W0APWP9MZ1/gfDQ/NzzTlWdIgYZ/ZbpN4d/UXRYw=
262github.com/jordanella/go-ansi-paintbrush v0.0.0-20240728195301-b7ad996ecf3d/go.mod h1:SV0W0APWP9MZ1/gfDQ/NzzTlWdIgYZ/ZbpN4d/UXRYw=
265github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
263github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
266github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
264github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
267−github.com/kaptinlin/go-i18n v0.4.9 h1:kxYNfExb1GG241BIPnQaD3YOvWkP7poHwfj8ctwIpkw=
265+github.com/kaptinlin/jsonpointer v0.4.26 h1:tw616yszHek+B3/GtDSia+uzBa3sLXGpmo4tYeMhBZw=
268−github.com/kaptinlin/go-i18n v0.4.9/go.mod h1:15vHHYLhwo1stIdztJatujSttIY6sRFt+7v8K1ik1AA=
269−github.com/kaptinlin/jsonpointer v0.4.25 h1:iJ197e8n+WwqaqBsa53FqG3rPJCg5oijyFXEXNWWC3E=
270−github.com/kaptinlin/jsonpointer v0.4.25/go.mod h1:wVOBaXGGnP42YsMb6zev/3W5POTvspdNfh8DXzf8XS8=
266+github.com/kaptinlin/jsonpointer v0.4.26/go.mod h1:wVOBaXGGnP42YsMb6zev/3W5POTvspdNfh8DXzf8XS8=
271−github.com/kaptinlin/jsonschema v0.7.15 h1:5v9TBnGOm/DV4EEsC13dfR0UXid/3OcR7yAnpRlruE0=
267+github.com/kaptinlin/jsonschema v0.9.2 h1:zqowDnBkpg80OeIt4Bl1bOyfKY1/KVVzst1m3MCsxd4=
272−github.com/kaptinlin/jsonschema v0.7.15/go.mod h1:5njr9isKoP9FnqZrFV1Iygx7QqjN3SBZ/AkgBl4Elug=
268+github.com/kaptinlin/jsonschema v0.9.2/go.mod h1:mCH2W5lXd29tdDjvoFfY32nedPORnlk7pCVrrcs/NkQ=
273−github.com/kaptinlin/messageformat-go v0.6.4 h1:6nC70fsqEn2xxg/Xoby2+Dk2r77kvxa3QNnYL/hsNcM=
274−github.com/kaptinlin/messageformat-go v0.6.4/go.mod h1:553UGZ1x5jmGtyH4pQKYwLGMyPm71deCoZICjq1DtR8=
275github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao=
269github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao=
276github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
270github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
277github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
271github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
@@ -296,8 +290,8 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0
296github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
290github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
297github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
291github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4=
298github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
292github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
299−github.com/mattn/go-runewidth v0.0.23 h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw=
293+github.com/mattn/go-runewidth v0.0.24 h1:cpokDiIn0MGnhdHwuWnJBITySJ20QyNGnY2kR/ay2DU=
300−github.com/mattn/go-runewidth v0.0.23/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
294+github.com/mattn/go-runewidth v0.0.24/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
301github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
295github.com/mfridman/interpolate v0.0.2 h1:pnuTK7MQIxxFz1Gr+rjSIx9u7qVjf5VOoM/u6BbAxPY=
302github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg=
296github.com/mfridman/interpolate v0.0.2/go.mod h1:p+7uk6oE07mpE/Ik1b8EckO0O4ZXiGAfshKBWLUM9Xg=
303github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
297github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
@@ -316,10 +310,10 @@ github.com/muesli/mango-pflag v0.1.0 h1:UADqbYgpUyRoBja3g6LUL+3LErjpsOwaC9ywvBWe
316github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
310github.com/muesli/mango-pflag v0.1.0/go.mod h1:YEQomTxaCUp8PrbhFh10UfbhbQrM/xJ4i2PB8VTLLW0=
317github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
311github.com/muesli/roff v0.1.0 h1:YD0lalCotmYuF5HhZliKWlIx7IEhiXeSfq7hNjFqGF8=
318github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
312github.com/muesli/roff v0.1.0/go.mod h1:pjAHQM9hdUUwm/krAfrLGgJkXJ+YuhtsfZ42kieB2Ig=
319−github.com/ncruces/go-sqlite3 v0.34.3 h1:DYN5fylZd9C28Rgmo6ie8vbv1SB9/Ddy0kVBTEzM9nk=
313+github.com/ncruces/go-sqlite3 v0.35.1 h1:h/LaVyQwIvBBT0+2JmVe2tbYyWjUQ093/pYhpBqdxJo=
320−github.com/ncruces/go-sqlite3 v0.34.3/go.mod h1:+NodfP7QTkYGFUAlAcPVcStvlfVTiqMC3OLKTaYiQCM=
314+github.com/ncruces/go-sqlite3 v0.35.1/go.mod h1:fXOSIkWwN5NXgbJk+7Zls8QIW4xOflmgh11OFvcY+J0=
321−github.com/ncruces/go-sqlite3-wasm/v2 v2.5.35301 h1:txZKZ0qUSPe63pzv6x0afpE4xUaqRbErCLd9gXvll+A=
315+github.com/ncruces/go-sqlite3-wasm/v3 v3.1.35302 h1:Cew7/eNAMd1zhpXYBjofBua/63pFvbvB2h4PM/p6gKU=
322−github.com/ncruces/go-sqlite3-wasm/v2 v2.5.35301/go.mod h1:PtJrZyZ+fUnI9yIcFxnUBFt2avGojqWeUkSrk10hh0I=
316+github.com/ncruces/go-sqlite3-wasm/v3 v3.1.35302/go.mod h1:xe0CfafDUxfh+fSVKjHHMiAxoG9KALt5nFtbGNb/jRs=
323github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
317github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w=
324github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
318github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
325github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M=
319github.com/ncruces/julianday v1.0.0 h1:fH0OKwa7NWvniGQtxdJRxAgkBMolni2BjDHaWTxqt7M=
@@ -333,8 +327,6 @@ github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
333github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
327github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
334github.com/pb33f/ordered-map/v2 v2.3.1 h1:5319HDO0aw4DA4gzi+zv4FXU9UlSs3xGZ40wcP1nBjY=
328github.com/pb33f/ordered-map/v2 v2.3.1 h1:5319HDO0aw4DA4gzi+zv4FXU9UlSs3xGZ40wcP1nBjY=
335github.com/pb33f/ordered-map/v2 v2.3.1/go.mod h1:qxFQgd0PkVUtOMCkTapqotNgzRhMPL7VvaHKbd1HnmQ=
329github.com/pb33f/ordered-map/v2 v2.3.1/go.mod h1:qxFQgd0PkVUtOMCkTapqotNgzRhMPL7VvaHKbd1HnmQ=
336−github.com/pelletier/go-toml/v2 v2.3.1 h1:MYEvvGnQjeNkRF1qUuGolNtNExTDwct51yp7olPtrEc=
337−github.com/pelletier/go-toml/v2 v2.3.1/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
338github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY=
330github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY=
339github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
331github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
340github.com/pjbgf/sha1cd v0.6.0 h1:3WJ8Wz8gvDz29quX1OcEmkAlUg9diU4GxJHqs0/XiwU=
332github.com/pjbgf/sha1cd v0.6.0 h1:3WJ8Wz8gvDz29quX1OcEmkAlUg9diU4GxJHqs0/XiwU=
@@ -349,12 +341,12 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1
349github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
341github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
350github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
342github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
351github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
343github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
352−github.com/posthog/posthog-go v1.13.1 h1:7OtfgOEM9fC2n4Hbs4e5mK1uaLuNguoYWFEI4kEnTUY=
344+github.com/posthog/posthog-go v1.17.5 h1:mrLiAdyiQpl8Yeyg23iShyAztJMaUrYzsBjKeH52Aak=
353−github.com/posthog/posthog-go v1.13.1/go.mod h1:xsVOW9YImilUcazwPNEq4PJDqEZf2KeCS758zXjwkPg=
345+github.com/posthog/posthog-go v1.17.5/go.mod h1://M430hNH3e8CDv4i8SJesb26816Mpa6GIZaiP4pNQU=
354−github.com/pressly/goose/v3 v3.27.1 h1:6uEvcprBybDmW4hcz3gYujhARhye+GoWKhEWyzD5sh4=
346+github.com/pressly/goose/v3 v3.27.2 h1:FjKNzcmMdGrQlSIu5alMSmakQtJFBgtw+A0bb1p/LC8=
355−github.com/pressly/goose/v3 v3.27.1/go.mod h1:maruOxsPnIG2yHHyo8UqKWXYKFcH7Q76csUV7+7KYoM=
347+github.com/pressly/goose/v3 v3.27.2/go.mod h1:qWW+/8dkVtJYjJrbIpwD5xxnEJTUKvxkQ9JKQp9LaIM=
356−github.com/qjebbs/go-jsons v1.0.0-alpha.5 h1:U2PPDxeKI1MMOSw7e7xyxhwH9Ggc7UrDvaRIkJ+l0n8=
348+github.com/qjebbs/go-jsons v1.0.0-alpha.6 h1:9pMjdrCT7rj9CDIM0FXf9Ilie8PEy9g1b4qMkCnedjQ=
357−github.com/qjebbs/go-jsons v1.0.0-alpha.5/go.mod h1:wNJrtinHyC3YSf6giEh4FJN8+yZV7nXBjvmfjhBIcw4=
349+github.com/qjebbs/go-jsons v1.0.0-alpha.6/go.mod h1:wNJrtinHyC3YSf6giEh4FJN8+yZV7nXBjvmfjhBIcw4=
358github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
350github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
359github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
351github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
360github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
352github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
@@ -362,8 +354,8 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc
362github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
354github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
363github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
355github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
364github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
356github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
365−github.com/sahilm/fuzzy v0.1.2 h1:kdSkz23lx1meNjEl+SLJULeSbjTI4Dn14K/YxdGrIww=
357+github.com/sahilm/fuzzy v0.1.3 h1:juByESSS32nVD81vr6tHmKmA/8zde7gE+x5CLxrzXPU=
366−github.com/sahilm/fuzzy v0.1.2/go.mod h1:au6//VbVSqu6DFrkL2CfjlJ5iURpNCPeE+1GwY3XsT8=
358+github.com/sahilm/fuzzy v0.1.3/go.mod h1:au6//VbVSqu6DFrkL2CfjlJ5iURpNCPeE+1GwY3XsT8=
367github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y=
359github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y=
368github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI=
360github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI=
369github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
361github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0=
@@ -421,6 +413,8 @@ github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 h1:pyC9PaHYZFgEKFdlp3G8
421github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
413github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
422github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
414github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
423github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
415github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
416+github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
417+github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
424github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
418github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
425github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
419github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
426github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
420github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
@@ -456,6 +450,10 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8
456go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
450go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
457go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go=
451go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go=
458go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0=
452go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0=
453+golang.design/x/clipboard v0.8.0 h1:6VEcH28wwcSgKc+vnxHHDWiRjrakTQIAJnPUrt3aOgg=
454+golang.design/x/clipboard v0.8.0/go.mod h1:s0pwrtA3Q9fgnVtGDmP5ZK/pp55cQKB23esKsjwWhWM=
455+golang.design/x/x11 v0.2.0 h1:Uiwu2guGihsJX/ZCzpoDPFz5gR/Qntm08mvoBCmRydo=
456+golang.design/x/x11 v0.2.0/go.mod h1:/5q1mFkdc1rL8mvB7DsQFi6as4tIkBv4FXjcP07mrkE=
459golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
457golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
460golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
458golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
461golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
459golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
@@ -463,20 +461,24 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf
463golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
461golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
464golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
462golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
465golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
463golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
466−golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988=
464+golang.org/x/crypto v0.53.0 h1:QZ4Muo8THX6CizN2vPPd5fBGHyogrdK9fG4wLPFUsto=
467−golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc=
465+golang.org/x/crypto v0.53.0/go.mod h1:DNLU434OwVakk9PzuwV8w62mAJpRJL3vsgcfp4Qnsio=
468golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM=
466golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f h1:W3F4c+6OLc6H2lb//N1q4WpJkhzJCK5J6kUi1NTVXfM=
469golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80=
467golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f/go.mod h1:J1xhfL/vlindoeF/aINzNzt2Bket5bjo9sdOYzOsU80=
468+golang.org/x/exp/shiny v0.0.0-20250606033433-dcc06ee1d476 h1:Wdx0vgH5Wgsw+lF//LJKmWOJBLWX6nprsMqnf99rYDE=
469+golang.org/x/exp/shiny v0.0.0-20250606033433-dcc06ee1d476/go.mod h1:ygj7T6vSGhhm/9yTpOQQNvuAUFziTH7RUiH74EoE2C8=
470golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
470golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
471−golang.org/x/image v0.38.0 h1:5l+q+Y9JDC7mBOMjo4/aPhMDcxEptsX+Tt3GgRQRPuE=
471+golang.org/x/image v0.43.0 h1:FLxcP4ec2350nTfOC8ysKtqYSIFbk/QGjw1ZHNP4tsY=
472−golang.org/x/image v0.38.0/go.mod h1:/3f6vaXC+6CEanU4KJxbcUZyEePbyKbaLoDOe4ehFYY=
472+golang.org/x/image v0.43.0/go.mod h1:rrpelvGFt+kLPAjPM4HeWPgrl0FtafueU//e5N0qk/Q=
473+golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f h1:/n+PL2HlfqeSiDCuhdBbRNlGS/g2fM4OHufalHaTVG8=
474+golang.org/x/mobile v0.0.0-20250606033058-a2a15c67f36f/go.mod h1:ESkJ836Z6LpG6mTVAhA48LpfW/8fNR0ifStlH2axyfg=
473golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
475golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
474golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
476golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
475golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
477golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
476golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
478golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
477golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
479golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
478−golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
480+golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4=
479−golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
481+golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ=
480golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
482golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
481golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
483golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
482golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
484golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
@@ -488,8 +490,8 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
488golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
490golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
489golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
491golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
490golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
492golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
491−golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
493+golang.org/x/net v0.56.0 h1:Rw8j/hFzGvJUZwNBXnAtf5sVDVt+65SK2C7IxCxZt5o=
492−golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
494+golang.org/x/net v0.56.0/go.mod h1:D3Ku6r+V6JROoZK144D2XfMHFcMq/0zSfLelVTCFKec=
493golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
495golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
494golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
496golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
495golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
497golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -499,8 +501,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
499golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
501golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
500golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
502golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
501golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
503golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
502−golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
504+golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM=
503−golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
505+golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
504golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
506golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
505golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
507golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
506golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
508golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -516,8 +518,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
516golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
518golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
517golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
519golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
518golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
520golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
519−golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
521+golang.org/x/sys v0.46.0 h1:noSf2Fq6F8DBgS+LysIkx7rIExoNHJsxOAtPp4rthXw=
520−golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
522+golang.org/x/sys v0.46.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
521golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
523golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
522golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
524golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
523golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
525golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -529,8 +531,8 @@ golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
529golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
531golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
530golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
532golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
531golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
533golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
532−golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
534+golang.org/x/term v0.44.0 h1:0rLvDRCtNj0gZkyIXhCyOb2OAzEhLVqc4B+hrsBhrmc=
533−golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
535+golang.org/x/term v0.44.0/go.mod h1:7ze4MdzUzLXpSAoFP1H0bOI9aXDqveSvatT5vKcFh2Y=
534golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
536golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
535golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
537golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
536golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
538golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
@@ -540,8 +542,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
540golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
542golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
541golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
543golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
542golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
544golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
543−golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
545+golang.org/x/text v0.38.0 h1:sXmwo9DwP3OK9EZ7PqAdaooSGozfl/3a6/xJcbzPRhE=
544−golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
546+golang.org/x/text v0.38.0/go.mod h1:YXZt3QhHUKYT53r2lLKFIVi6Ao1jdzrTR/KQ09qyxF4=
545golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
547golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
546golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
548golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
547golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
549golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -550,21 +552,21 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
550golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
552golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
551golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
553golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
552golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
554golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
553−golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
555+golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8=
554−golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
556+golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0=
555golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
557golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
556gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
558gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
557gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
559gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
558−google.golang.org/api v0.282.0 h1:WmJiSVqUnKqJCpJOx7YADbXaC+9DDsnGSfllFSj7R2I=
560+google.golang.org/api v0.286.0 h1:TdTXMvzYKnWV1/lPbCdbXRqBrkDqjPto22H2xeZZ8LI=
559−google.golang.org/api v0.282.0/go.mod h1:6Wssta4c5n9qHq5CBhmlai5h/PUa1djdDAIhYEHyvcM=
561+google.golang.org/api v0.286.0/go.mod h1:NlOlUIr8MPoIhT9Bb/oUnRuHbJOLwxb6JSYJM8Yz+jQ=
560−google.golang.org/genai v1.58.0 h1:MNA3ZkRyr7MnRwZ9RNZ60p4+UMKV3yYRw6pyHq4pp0U=
562+google.golang.org/genai v1.62.0 h1:PaBju84orf4Vbcc6OfHe4vxhxhjwulKTgOpEc3iIc00=
561−google.golang.org/genai v1.58.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk=
563+google.golang.org/genai v1.62.0/go.mod h1:mDdPDFXo1Ats7f1WXVyZgWb/CkMzFWTWJruIMy7hGIU=
562−google.golang.org/genproto v0.0.0-20260526163538-3dc84a4a5aaa h1:mfj8IS4EA4VAR9a6QDVxTQkLY64iBybb5QI1B4pXrpE=
564+google.golang.org/genproto v0.0.0-20260622175928-b703f567277d h1:CP5omUq8AJTiWMrPKM1WRLJ7zZeXd9OPcQD3TbBNAyY=
563−google.golang.org/genproto v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:fuT7yonGw1Iq2oa+YC0fyqPPQJkgo/54gPNC6VitOkI=
565+google.golang.org/genproto v0.0.0-20260622175928-b703f567277d/go.mod h1:DrwuGJgFSEVNpv3S5Q5VxhRTvdnjauw9GtvwVOEARfA=
564−google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8=
566+google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d h1:xr2lwHI91bn3UiXcnyzRMQjp2LRiM8wEHzwUaE0YhTs=
565−google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:q4lMZS6kskjT5HvCPrnnypcDPVJqT/f4nfxmkE7gryY=
567+google.golang.org/genproto/googleapis/api v0.0.0-20260622175928-b703f567277d/go.mod h1:O0ZOWSrfWfJ+Z5HbwZ+wNtHsg/vk1k2C/w67eww8PfQ=
566−google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1:mZHHdPZl0dbGHCflZgAq/Q468DWVFcU2whhB2KAo8fk=
568+google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d h1:mpAgMyM9vQHxycBlDq50y1VHpfSfVwzXvrQKtYbXuUY=
567−google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
569+google.golang.org/genproto/googleapis/rpc v0.0.0-20260622175928-b703f567277d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
568google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ=
570google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ=
569google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
571google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I=
570google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
572google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
@@ -590,20 +592,20 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
590gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
592gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
591gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
593gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
592gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
594gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
593−modernc.org/cc/v4 v4.28.2 h1:3tQ0lf2ADtoby2EtSP+J7IE2SHwEJdP8ioR59wx7XpY=
595+modernc.org/cc/v4 v4.28.4 h1:Hd/4Es+MBj+/7hSdZaisNyu6bv3V0Dp2MdllyfqaH+c=
594−modernc.org/cc/v4 v4.28.2/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI=
596+modernc.org/cc/v4 v4.28.4/go.mod h1:OnovgIhbbMXMu1aISnJ0wvVD1KnW+cAUJkIrAWh+kVI=
595−modernc.org/ccgo/v4 v4.34.0 h1:yRLPFZieg532OT4rp4JFNIVcquwalMX26G95WQDqwCQ=
597+modernc.org/ccgo/v4 v4.34.4 h1:OVnSOWQjVKOYkFxoHYB+qQmSHK5gqMqARM+K9DpR/Ws=
596−modernc.org/ccgo/v4 v4.34.0/go.mod h1:AS5WYMyBakQ+fhsHhtP8mWB82KTGPkNNJDGfGQCe0/A=
598+modernc.org/ccgo/v4 v4.34.4/go.mod h1:qdKqE8FNIYyysougB1RX9MxCzp5oJOcQXSobANJ4TuE=
597modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM=
599modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM=
598modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU=
600modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU=
599modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
601modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI=
600modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
602modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
601−modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo=
603+modernc.org/gc/v3 v3.1.3 h1:6QAplYyVO+KdPW3pGnqmJDUxtkec8ooEWvks/hhU3lc=
602−modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY=
604+modernc.org/gc/v3 v3.1.3/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY=
603modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
605modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks=
604modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
606modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI=
605−modernc.org/libc v1.72.3 h1:ZnDF4tXn4NBXFutMMQC4vtbTFSXhhKzR73fv0beZEAU=
607+modernc.org/libc v1.73.4 h1:+ra4Ui8ngyt8HDcO1FTDPWlkAh6yOdaO2yAoh8MddQA=
606−modernc.org/libc v1.72.3/go.mod h1:dn0dZNnnn1clLyvRxLxYExxiKRZIRENOfqQ8XEeg4Qs=
608+modernc.org/libc v1.73.4/go.mod h1:DXZ3eO8qMCNn2SnmTNCiC71nJ9Rcq3PsnpU6Vc4rWK8=
607modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
609modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
608modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
610modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
609modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
611modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI=
@@ -612,8 +614,8 @@ modernc.org/opt v0.2.0 h1:tGyef5ApycA7FSEOMraay9SaTk5zmbx7Tu+cJs4QKZg=
612modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
614modernc.org/opt v0.2.0/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
613modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
615modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
614modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
616modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
615−modernc.org/sqlite v1.51.0 h1:aH/MMSoayAIhozZ7uJbVTT9QO/VhzBf0J9tymmmuC/U=
617+modernc.org/sqlite v1.53.0 h1:20WG8N9q4ji/dEqGk4uiI0c6OPjSeLTNYGFCc3+7c1M=
616−modernc.org/sqlite v1.51.0/go.mod h1:tcNzv5p84E0skkmJn038y+hWJbLQXQqEnQfeh5r2JLM=
618+modernc.org/sqlite v1.53.0/go.mod h1:xoEpOIpGrgT48H5iiyt/YXPCZPEzlfmfFwtk8Lklw8s=
617modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
619modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
618modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
620modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
619modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
621modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
internal/agent/accepted_run_test.gonew file+231
@@ -0,0 +1,231 @@
1+package agent
2+
3+import (
4+ "context"
5+ "testing"
6+
7+ "github.com/charmbracelet/crush/internal/message"
8+ "github.com/stretchr/testify/assert"
9+ "github.com/stretchr/testify/require"
10+)
11+
12+// newCancelTestAgent builds a DB-backed sessionAgent with no model. The
13+// tests here exercise the dispatch/cancel/persist paths, none of which
14+// reach agent.Stream, so a model is unnecessary.
15+func newCancelTestAgent(t *testing.T) (*sessionAgent, fakeEnv) {
16+ t.Helper()
17+ env := testEnv(t)
18+ sa := NewSessionAgent(SessionAgentOptions{
19+ Sessions: env.sessions,
20+ Messages: env.messages,
21+ }).(*sessionAgent)
22+ return sa, env
23+}
24+
25+func (a *sessionAgent) acceptedCount(sessionID string) int {
26+ c, _ := a.acceptedRuns.Get(sessionID)
27+ return c
28+}
29+
30+func (a *sessionAgent) hasPendingCancel(sessionID string) bool {
31+ mark, ok := a.cancelMark.Get(sessionID)
32+ return ok && mark > 0
33+}
34+
35+func (a *sessionAgent) pendingCancelMark(sessionID string) uint64 {
36+ mark, _ := a.cancelMark.Get(sessionID)
37+ return mark
38+}
39+
40+func TestAcceptedRun_CloseIsIdempotent(t *testing.T) {
41+ t.Parallel()
42+ sa, _ := newCancelTestAgent(t)
43+
44+ accept := sa.BeginAccepted("sid")
45+ require.Equal(t, "sid", accept.SessionID())
46+ require.Equal(t, 1, sa.acceptedCount("sid"))
47+
48+ accept.Close()
49+ require.Equal(t, 0, sa.acceptedCount("sid"))
50+
51+ // Repeated Close must not underflow the counter.
52+ accept.Close()
53+ accept.Close()
54+ require.Equal(t, 0, sa.acceptedCount("sid"))
55+}
56+
57+func TestAcceptedRun_MultipleReservations(t *testing.T) {
58+ t.Parallel()
59+ sa, _ := newCancelTestAgent(t)
60+
61+ a1 := sa.BeginAccepted("sid")
62+ a2 := sa.BeginAccepted("sid")
63+ require.Equal(t, 2, sa.acceptedCount("sid"))
64+
65+ a1.Close()
66+ require.Equal(t, 1, sa.acceptedCount("sid"))
67+
68+ a2.Close()
69+ require.Equal(t, 0, sa.acceptedCount("sid"))
70+}
71+
72+func TestAcceptedRun_NilSafe(t *testing.T) {
73+ t.Parallel()
74+ var accept *AcceptedRun
75+ require.Equal(t, "", accept.SessionID())
76+ // Must not panic.
77+ accept.Close()
78+}
79+
80+func TestCancel_IdleDoesNotRecordPendingCancel(t *testing.T) {
81+ t.Parallel()
82+ sa, _ := newCancelTestAgent(t)
83+
84+ // No accepted run, no active request: a true no-op.
85+ sa.Cancel("sid")
86+ require.False(t, sa.hasPendingCancel("sid"))
87+}
88+
89+func TestCancel_AcceptedRecordsPendingCancel(t *testing.T) {
90+ t.Parallel()
91+ sa, _ := newCancelTestAgent(t)
92+
93+ accept := sa.BeginAccepted("sid")
94+ defer accept.Close()
95+
96+ sa.Cancel("sid")
97+ require.True(t, sa.hasPendingCancel("sid"))
98+}
99+
100+func TestCancel_SecondCancelWhilePendingIsNoOp(t *testing.T) {
101+ t.Parallel()
102+ sa, _ := newCancelTestAgent(t)
103+
104+ accept := sa.BeginAccepted("sid")
105+ defer accept.Close()
106+
107+ sa.Cancel("sid")
108+ require.True(t, sa.hasPendingCancel("sid"))
109+
110+ // A second cancel while a pending cancel is already recorded must
111+ // remain a single pending cancel; one Run consumes exactly one.
112+ sa.Cancel("sid")
113+ require.True(t, sa.hasPendingCancel("sid"))
114+}
115+
116+func TestRun_CancelOnEntryPersistsCanceledTurn(t *testing.T) {
117+ t.Parallel()
118+ sa, env := newCancelTestAgent(t)
119+
120+ sess, err := env.sessions.Create(t.Context(), "session")
121+ require.NoError(t, err)
122+
123+ accept := sa.BeginAccepted(sess.ID)
124+ // A cancel arrives in the accepted-but-not-yet-active window.
125+ sa.Cancel(sess.ID)
126+ require.True(t, sa.hasPendingCancel(sess.ID))
127+
128+ result, err := sa.Run(t.Context(), SessionAgentCall{
129+ SessionID: sess.ID,
130+ Prompt: "hello",
131+ Accepted: accept,
132+ })
133+ require.NoError(t, err)
134+ require.Nil(t, result)
135+
136+ // The pending cancel was consumed and the accept released.
137+ require.False(t, sa.hasPendingCancel(sess.ID))
138+ require.Equal(t, 0, sa.acceptedCount(sess.ID))
139+
140+ msgs, err := env.messages.List(t.Context(), sess.ID)
141+ require.NoError(t, err)
142+ require.Len(t, msgs, 2)
143+ assert.Equal(t, message.User, msgs[0].Role)
144+ assert.Equal(t, message.Assistant, msgs[1].Role)
145+ assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
146+}
147+
148+func TestPersistCanceledTurn_WritesBothWhenUserMissing(t *testing.T) {
149+ t.Parallel()
150+ sa, env := newCancelTestAgent(t)
151+
152+ sess, err := env.sessions.Create(t.Context(), "session")
153+ require.NoError(t, err)
154+
155+ err = sa.persistCanceledTurn(t.Context(), SessionAgentCall{
156+ SessionID: sess.ID,
157+ Prompt: "hello",
158+ }, false)
159+ require.NoError(t, err)
160+
161+ msgs, err := env.messages.List(t.Context(), sess.ID)
162+ require.NoError(t, err)
163+ require.Len(t, msgs, 2)
164+ assert.Equal(t, message.User, msgs[0].Role)
165+ assert.Equal(t, message.Assistant, msgs[1].Role)
166+ assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
167+}
168+
169+func TestPersistCanceledTurn_WritesAssistantOnlyWhenUserCreated(t *testing.T) {
170+ t.Parallel()
171+ sa, env := newCancelTestAgent(t)
172+
173+ sess, err := env.sessions.Create(t.Context(), "session")
174+ require.NoError(t, err)
175+
176+ // Simulate PrepareStep having already created the user message.
177+ _, err = sa.createUserMessage(t.Context(), SessionAgentCall{
178+ SessionID: sess.ID,
179+ Prompt: "hello",
180+ })
181+ require.NoError(t, err)
182+
183+ err = sa.persistCanceledTurn(t.Context(), SessionAgentCall{
184+ SessionID: sess.ID,
185+ Prompt: "hello",
186+ }, true)
187+ require.NoError(t, err)
188+
189+ msgs, err := env.messages.List(t.Context(), sess.ID)
190+ require.NoError(t, err)
191+ require.Len(t, msgs, 2)
192+ assert.Equal(t, message.User, msgs[0].Role)
193+ assert.Equal(t, message.Assistant, msgs[1].Role)
194+ assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
195+}
196+
197+func TestPersistCanceledTurn_SucceedsWithCanceledContext(t *testing.T) {
198+ t.Parallel()
199+ sa, env := newCancelTestAgent(t)
200+
201+ sess, err := env.sessions.Create(t.Context(), "session")
202+ require.NoError(t, err)
203+
204+ // Simulate workspace shutdown having already canceled the run
205+ // context. WithoutCancel must let the writes through.
206+ ctx, cancel := context.WithCancel(t.Context())
207+ cancel()
208+
209+ err = sa.persistCanceledTurn(ctx, SessionAgentCall{
210+ SessionID: sess.ID,
211+ Prompt: "hello",
212+ }, false)
213+ require.NoError(t, err)
214+
215+ msgs, err := env.messages.List(t.Context(), sess.ID)
216+ require.NoError(t, err)
217+ require.Len(t, msgs, 2)
218+}
219+
220+func TestClearPendingCancel(t *testing.T) {
221+ t.Parallel()
222+ sa, _ := newCancelTestAgent(t)
223+
224+ accept := sa.BeginAccepted("sid")
225+ defer accept.Close()
226+ sa.Cancel("sid")
227+ require.True(t, sa.hasPendingCancel("sid"))
228+
229+ sa.clearPendingCancel("sid")
230+ require.False(t, sa.hasPendingCancel("sid"))
231+}
internal/agent/agent.go+835−122
@@ -12,15 +12,18 @@ import (
12 "context"
12 "context"
13 _ "embed"
13 _ "embed"
14 "encoding/base64"
14 "encoding/base64"
15+ "encoding/json"
15 "errors"
16 "errors"
16 "fmt"
17 "fmt"
17 "log/slog"
18 "log/slog"
19+ "math"
18 "net/http"
20 "net/http"
19 "os"
21 "os"
20 "regexp"
22 "regexp"
21 "strconv"
23 "strconv"
22 "strings"
24 "strings"
23 "sync"
25 "sync"
26+ "sync/atomic"
24 "time"
27 "time"
25
28
26 "charm.land/catwalk/pkg/catwalk"
29 "charm.land/catwalk/pkg/catwalk"
@@ -43,6 +46,7 @@ import (
43 "github.com/charmbracelet/crush/internal/session"
46 "github.com/charmbracelet/crush/internal/session"
44 "github.com/charmbracelet/crush/internal/stringext"
47 "github.com/charmbracelet/crush/internal/stringext"
45 "github.com/charmbracelet/crush/internal/version"
48 "github.com/charmbracelet/crush/internal/version"
49+ "github.com/charmbracelet/x/ansi"
46 "github.com/charmbracelet/x/exp/charmtone"
50 "github.com/charmbracelet/x/exp/charmtone"
47)
51)
48
52
@@ -103,10 +107,28 @@ type SessionAgentCall struct {
103 // recursion drains, so falling back to the default broker
107 // recursion drains, so falling back to the default broker
104 // publish keeps the event visible to subscribers.
108 // publish keeps the event visible to subscribers.
105 OnComplete func(notify.RunComplete)
109 OnComplete func(notify.RunComplete)
110+ // Accepted, when non-nil, is the accept reservation taken by
111+ // BeginAccepted before the call was dispatched onto a goroutine
112+ // (the client/server fire-and-forget path). Run consumes it under
113+ // dispatchMu[SessionID] once the accepted -> (cancel-on-entry |
114+ // queued | active) transition has been chosen. When nil
115+ // (in-process / local callers like AppWorkspace), behavior is
116+ // unchanged and no accept tracking applies.
117+ Accepted *AcceptedRun
118+ // acceptSeq carries the accept sequence of the handle that produced
119+ // this call after it has been enqueued and its Accepted handle
120+ // stripped. The queue-drain paths compare it against a session's
121+ // cancel mark so a follow-up queued before a cancel is dropped while
122+ // one queued after the cancel survives. 0 means untracked (an
123+ // in-process enqueue with no accept reservation), which the drain
124+ // paths treat as covered by any present mark, preserving the
125+ // pre-sequence behavior.
126+ acceptSeq uint64
106}
127}
107
128
108type SessionAgent interface {
129type SessionAgent interface {
109 Run(context.Context, SessionAgentCall) (*fantasy.AgentResult, error)
130 Run(context.Context, SessionAgentCall) (*fantasy.AgentResult, error)
131+ BeginAccepted(sessionID string) *AcceptedRun
110 SetModels(large Model, small Model)
132 SetModels(large Model, small Model)
111 SetTools(tools []fantasy.AgentTool)
133 SetTools(tools []fantasy.AgentTool)
112 SetSystemPrompt(systemPrompt string)
134 SetSystemPrompt(systemPrompt string)
@@ -119,6 +141,7 @@ type SessionAgent interface {
119 ClearQueue(sessionID string)
141 ClearQueue(sessionID string)
120 Summarize(context.Context, string, fantasy.ProviderOptions) error
142 Summarize(context.Context, string, fantasy.ProviderOptions) error
121 Model() Model
143 Model() Model
144+ GenerateTitle(ctx context.Context, sessionID, userPrompt string)
122}
145}
123
146
124type Model struct {
147type Model struct {
@@ -134,6 +157,7 @@ type sessionAgent struct {
134 systemPromptPrefix *csync.Value[string]
157 systemPromptPrefix *csync.Value[string]
135 systemPrompt *csync.Value[string]
158 systemPrompt *csync.Value[string]
136 tools *csync.Slice[fantasy.AgentTool]
159 tools *csync.Slice[fantasy.AgentTool]
160+ toolsGen atomic.Uint64 // bumped by SetTools; lets PrepareStep skip re-copying unchanged tools
137
161
138 isSubAgent bool
162 isSubAgent bool
139 sessions session.Service
163 sessions session.Service
@@ -145,6 +169,43 @@ type sessionAgent struct {
145
169
146 messageQueue *csync.Map[string, []SessionAgentCall]
170 messageQueue *csync.Map[string, []SessionAgentCall]
147 activeRequests *csync.Map[string, context.CancelFunc]
171 activeRequests *csync.Map[string, context.CancelFunc]
172+
173+ // dispatchMu holds a per-session mutex that serializes the
174+ // accepted -> (cancel-on-entry | queued | active) transition in
175+ // Run against a concurrent Cancel. The lock is held only during
176+ // the brief handoff (no DB or LLM I/O under the lock).
177+ dispatchMu *csync.Map[string, *sync.Mutex]
178+ // acceptedRuns counts dispatched-but-not-yet-active runs per
179+ // session. A counter > 0 means a dispatched prompt is in flight
180+ // and has not yet completed the dispatch handoff in Run. Only
181+ // BeginAccepted increments it; only AcceptedRun.Close decrements
182+ // it.
183+ acceptedRuns *csync.Map[string, int]
184+ // cancelMark records, per session, a high-water accept sequence: an
185+ // accepted handle is canceled by it iff the handle's sequence is at
186+ // or below the mark. Cancel raises the mark to the latest sequence
187+ // assigned at cancel time, so a single Cancel covers every prompt
188+ // accepted-but-not-yet-active then, while a prompt accepted later
189+ // (higher sequence) is never poisoned. Absent or 0 means no pending
190+ // cancel. It is only raised by Cancel when acceptedRuns > 0, so an
191+ // idle Escape never records a mark.
192+ cancelMark *csync.Map[string, uint64]
193+ // dispatchMuCreate guards lazy creation of per-session entries in
194+ // dispatchMu so two goroutines can't race to lock different mutex
195+ // instances for the same session.
196+ dispatchMuCreate sync.Mutex
197+ // acceptedMu serializes increments/decrements of acceptedRuns and
198+ // the assignment of accept sequence numbers from acceptSeqGen. It
199+ // is separate from dispatchMu so AcceptedRun.Close (which may run
200+ // while Run holds dispatchMu for the same session) does not
201+ // deadlock by re-entering the dispatch lock.
202+ acceptedMu sync.Mutex
203+ // acceptSeqGen is the monotonic source of accept sequence numbers.
204+ // Each BeginAccepted increments it under acceptedMu and stamps the
205+ // returned handle, so sequences strictly increase in accept order
206+ // across the agent. Cancel uses its current value as the per-session
207+ // high-water mark.
208+ acceptSeqGen uint64
148}
209}
149
210
150type SessionAgentOptions struct {
211type SessionAgentOptions struct {
@@ -180,38 +241,415 @@ func NewSessionAgent(
180 runComplete: opts.RunComplete,
241 runComplete: opts.RunComplete,
181 messageQueue: csync.NewMap[string, []SessionAgentCall](),
242 messageQueue: csync.NewMap[string, []SessionAgentCall](),
182 activeRequests: csync.NewMap[string, context.CancelFunc](),
243 activeRequests: csync.NewMap[string, context.CancelFunc](),
244+ dispatchMu: csync.NewMap[string, *sync.Mutex](),
245+ acceptedRuns: csync.NewMap[string, int](),
246+ cancelMark: csync.NewMap[string, uint64](),
183 }
247 }
184}
248}
185
249
186−func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *fantasy.AgentResult, retErr error) {
250+// AcceptedRun owns exactly one accept reservation taken by
251+// BeginAccepted. It is the only carrier of accept-state across the
252+// backend.runAgent / Coordinator.Run / sessionAgent.Run layers: a
253+// counter > 0 means a dispatched prompt is in flight and has not yet
254+// completed the dispatch handoff in Run. Close is the only way to
255+// release the reservation and is idempotent.
256+type AcceptedRun struct {
257+ agent *sessionAgent
258+ sessionID string
259+ // seq is the monotonic accept sequence stamped by BeginAccepted. A
260+ // cancel covers this handle iff seq is at or below the session's
261+ // cancel mark, so a handle accepted after a cancel (higher seq) is
262+ // never poisoned by it.
263+ seq uint64
264+ done atomic.Bool
265+}
266+
267+// Close decrements the accept counter for this reservation. It is safe
268+// to call multiple times; only the first call has effect.
269+func (r *AcceptedRun) Close() {
270+ if r == nil {
271+ return
272+ }
273+ if !r.done.CompareAndSwap(false, true) {
274+ return
275+ }
276+ r.agent.endAccepted(r.sessionID)
277+}
278+
279+// SessionID exposes the session this reservation is for so the run path
280+// can use it without an extra parameter.
281+func (r *AcceptedRun) SessionID() string {
282+ if r == nil {
283+ return ""
284+ }
285+ return r.sessionID
286+}
287+
288+// BeginAccepted increments the accept counter for sessionID and returns
289+// a handle whose Close is the only way to decrement it. It is the only
290+// entry point that mutates acceptedRuns.
291+func (a *sessionAgent) BeginAccepted(sessionID string) *AcceptedRun {
292+ a.acceptedMu.Lock()
293+ defer a.acceptedMu.Unlock()
294+ count, _ := a.acceptedRuns.Get(sessionID)
295+ a.acceptedRuns.Set(sessionID, count+1)
296+ a.acceptSeqGen++
297+ return &AcceptedRun{agent: a, sessionID: sessionID, seq: a.acceptSeqGen}
298+}
299+
300+// endAccepted decrements the accept counter for sessionID. It is only
301+// called via AcceptedRun.Close. It uses a dedicated lock (not the
302+// per-session dispatch mutex) so it can run while Run holds dispatchMu
303+// for the same session without deadlocking.
304+//
305+// When the count reaches zero the session's cancel mark is dropped: no
306+// accepted handle remains for it to cover, and any handle accepted later
307+// gets a strictly higher sequence that the mark would not match anyway.
308+// Handles canceled on entry never reach RunComplete, so this is the only
309+// place that clears the mark for an all-canceled batch. Sibling handles
310+// covered by the same mark are serialized on the per-session dispatch
311+// mutex and read the mark before they Close, so this never clears it out
312+// from under a covered handle still waiting to enter Run.
313+func (a *sessionAgent) endAccepted(sessionID string) {
314+ a.acceptedMu.Lock()
315+ defer a.acceptedMu.Unlock()
316+ count, ok := a.acceptedRuns.Get(sessionID)
317+ if !ok || count <= 1 {
318+ a.acceptedRuns.Del(sessionID)
319+ a.cancelMark.Del(sessionID)
320+ return
321+ }
322+ a.acceptedRuns.Set(sessionID, count-1)
323+}
324+
325+// sessionMu returns the per-session dispatch mutex, creating it on first
326+// use. Creation is guarded so concurrent callers always observe the same
327+// mutex instance for a given session.
328+func (a *sessionAgent) sessionMu(sessionID string) *sync.Mutex {
329+ if mu, ok := a.dispatchMu.Get(sessionID); ok {
330+ return mu
331+ }
332+ a.dispatchMuCreate.Lock()
333+ defer a.dispatchMuCreate.Unlock()
334+ if mu, ok := a.dispatchMu.Get(sessionID); ok {
335+ return mu
336+ }
337+ mu := &sync.Mutex{}
338+ a.dispatchMu.Set(sessionID, mu)
339+ return mu
340+}
341+
342+// enqueueCall appends call to the session's message queue. The
343+// OnComplete hook is stripped: the caller that supplied it (typically
344+// coordinator.Run) has its own retry/coalesce scope that ends when it
345+// returns, so by the time the queue drains nobody is left to consume the
346+// buffered terminal event. The recursive Run falls back to the default
347+// broker publish, which is what existing subscribers expect for queued
348+// turns.
349+func (a *sessionAgent) enqueueCall(call SessionAgentCall) {
350+ existing, ok := a.messageQueue.Get(call.SessionID)
351+ if !ok {
352+ existing = make([]SessionAgentCall, 0, 4)
353+ }
354+ queued := call
355+ if call.Accepted != nil {
356+ // Preserve the accept sequence after the handle is stripped so
357+ // the queue-drain paths can tell a follow-up queued before a
358+ // cancel (covered by the mark) from one queued after it.
359+ queued.acceptSeq = call.Accepted.seq
360+ }
361+ queued.OnComplete = nil
362+ queued.Accepted = nil
363+ existing = append(existing, queued)
364+ a.messageQueue.Set(call.SessionID, existing)
365+}
366+
367+// drainQueueForStep partitions the session's queued calls for the current
368+// streaming step under the per-session dispatch mutex so the filtering is
369+// atomic against a concurrent Cancel: canceledBySeq requires the caller to
370+// hold that mutex, and evaluating it here (rather than after unlocking)
371+// prevents a cancel recorded between the drain and the check from being
372+// observed inconsistently.
373+//
374+// Calls covered by a pending cancel are dropped; the dropped ones that
375+// carry a RunID are returned in canceledWithRunID so the caller can
376+// publish their terminal cancelled RunComplete (a caller waiting on that
377+// RunID, e.g. `crush run`, would otherwise hang). Uncanceled calls without
378+// a RunID are returned in fold to be folded into the active turn,
379+// preserving the existing follow-up behavior. Uncanceled calls that carry
380+// a RunID are left in the queue so each runs as its own turn via the
381+// recursive run path and publishes its own RunComplete, giving every
382+// RunID-bearing prompt an explicit lifecycle instead of being silently
383+// absorbed into another turn. fold is processed by the caller without the
384+// lock held.
385+func (a *sessionAgent) drainQueueForStep(sessionID string) (fold, canceledWithRunID []SessionAgentCall) {
386+ dispatchLock := a.sessionMu(sessionID)
387+ dispatchLock.Lock()
388+ defer dispatchLock.Unlock()
389+ queuedCalls, _ := a.messageQueue.Get(sessionID)
390+ var keep []SessionAgentCall
391+ for _, queued := range queuedCalls {
392+ if a.canceledBySeq(sessionID, queued.acceptSeq) {
393+ if queued.RunID != "" {
394+ canceledWithRunID = append(canceledWithRunID, queued)
395+ }
396+ continue
397+ }
398+ if queued.RunID != "" {
399+ keep = append(keep, queued)
400+ continue
401+ }
402+ fold = append(fold, queued)
403+ }
404+ if len(keep) == 0 {
405+ a.messageQueue.Del(sessionID)
406+ } else {
407+ a.messageQueue.Set(sessionID, keep)
408+ }
409+ return fold, canceledWithRunID
410+}
411+
412+// publishCanceledQueueDrops emits a terminal cancelled RunComplete for
413+// every dropped queued call that carries a RunID. A queued prompt removed
414+// from the queue without ever running — covered by a pending cancel, or
415+// cleared by Cancel/ClearQueue — would otherwise leave a caller blocked on
416+// that RunID: `crush run` ignores live message events and exits only on a
417+// RunComplete whose RunID matches. Calls without a RunID had no such waiter
418+// and are dropped silently as before. A detached, bounded context keeps the
419+// must-deliver publish alive even when the run context that triggered the
420+// drop is already canceled.
421+func (a *sessionAgent) publishCanceledQueueDrops(drops []SessionAgentCall) {
422+ var hasRunID bool
423+ for _, d := range drops {
424+ if d.RunID != "" {
425+ hasRunID = true
426+ break
427+ }
428+ }
429+ if !hasRunID {
430+ return
431+ }
432+ ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
433+ defer cancel()
434+ for _, d := range drops {
435+ if d.RunID == "" {
436+ continue
437+ }
438+ a.publishRunComplete(ctx, d, notify.RunComplete{
439+ SessionID: d.SessionID,
440+ RunID: d.RunID,
441+ Cancelled: true,
442+ })
443+ }
444+}
445+
446+// clearQueueAndNotify removes all queued prompts for the session and
447+// publishes a terminal cancelled RunComplete for any that carried a RunID,
448+// so callers waiting on those RunIDs (e.g. `crush run`) are not left
449+// hanging when their queued prompt is discarded without running.
450+func (a *sessionAgent) clearQueueAndNotify(sessionID string) {
451+ queued, ok := a.messageQueue.Get(sessionID)
452+ a.messageQueue.Del(sessionID)
453+ if !ok {
454+ return
455+ }
456+ a.publishCanceledQueueDrops(queued)
457+}
458+
459+// clearPendingCancel removes any pending-cancel mark for sessionID. It
460+// takes the per-session dispatch lock so it is ordered against Cancel
461+// and the dispatch handoff.
462+func (a *sessionAgent) clearPendingCancel(sessionID string) {
463+ mu := a.sessionMu(sessionID)
464+ mu.Lock()
465+ defer mu.Unlock()
466+ a.cancelMark.Del(sessionID)
467+}
468+
469+// canceledBySeq reports whether an accepted handle or queued call with
470+// the given accept sequence is covered by a pending cancel for the
471+// session. Callers must hold the session's dispatch mutex. A tracked
472+// sequence (seq > 0) is covered only when it is at or below the cancel
473+// high-water mark, so a prompt accepted after the cancel (higher seq) is
474+// never poisoned. An untracked sequence (seq == 0, an in-process enqueue
475+// with no accept reservation) is covered whenever any mark is present,
476+// preserving the pre-sequence behavior. The mark is not consumed: it
477+// stays so every sibling handle it covers observes the same cancel, and
478+// a later handle (higher seq) ignores it regardless.
479+func (a *sessionAgent) canceledBySeq(sessionID string, seq uint64) bool {
480+ mark, ok := a.cancelMark.Get(sessionID)
481+ if !ok || mark == 0 {
482+ return false
483+ }
484+ return seq == 0 || seq <= mark
485+}
486+
487+// persistCanceledTurn writes the user/assistant records for a turn that
488+// was canceled before (or just as) streaming would have produced them.
489+// It creates the user message only when it was not already created by an
490+// earlier createUserMessage call (userMsgCreated), then writes an
491+// assistant message with FinishReasonCanceled. Both writes use
492+// context.WithoutCancel(ctx) so workspace shutdown (which cancels the run
493+// context) can't drop them.
494+func (a *sessionAgent) persistCanceledTurn(ctx context.Context, call SessionAgentCall, userMsgCreated bool) error {
495+ writeCtx, cancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
496+ defer cancel()
497+ if !userMsgCreated {
498+ if _, err := a.createUserMessage(writeCtx, call); err != nil {
499+ return err
500+ }
501+ }
502+ largeModel := a.largeModel.Get()
503+ assistant, err := a.messages.Create(writeCtx, call.SessionID, message.CreateMessageParams{
504+ Role: message.Assistant,
505+ Parts: []message.ContentPart{},
506+ Model: largeModel.ModelCfg.Model,
507+ Provider: largeModel.ModelCfg.Provider,
508+ })
509+ if err != nil {
510+ return err
511+ }
512+ assistant.AddFinish(message.FinishReasonCanceled, "User canceled request", "")
513+ return a.messages.Update(writeCtx, assistant)
514+}
515+
516+// publishRunComplete emits the authoritative terminal event for a turn.
517+// It honors the per-call OnComplete hook when set (so the coordinator can
518+// coalesce retries) and otherwise falls back to the RunComplete broker.
519+// ctx is used only for the bounded-blocking must-deliver publish; the
520+// terminal payload is supplied by the caller. This is the single emit path
521+// shared by the streaming defer and the cancel-on-entry early return so a
522+// caller waiting on RunComplete (e.g. `crush run` with a RunID) always
523+// observes exactly one terminal event regardless of which Run branch ends
524+// the turn.
525+func (a *sessionAgent) publishRunComplete(ctx context.Context, call SessionAgentCall, complete notify.RunComplete) {
526+ if call.OnComplete != nil {
527+ call.OnComplete(complete)
528+ return
529+ }
530+ if a.runComplete == nil {
531+ return
532+ }
533+ a.runComplete.PublishMustDeliver(ctx, pubsub.UpdatedEvent, complete)
534+}
535+
536+// ValidateCall performs the cheap structural validation that
537+// sessionAgent.Run requires before a call can be dispatched: a call must
538+// carry either a non-empty prompt or a text attachment, and it must name a
539+// session. It is exported so callers that accept a run before dispatching it
540+// (e.g. backend.SendMessage) can apply the same checks and keep the error
541+// contract consistent.
542+func ValidateCall(call SessionAgentCall) error {
187 if call.Prompt == "" && !message.ContainsTextAttachment(call.Attachments) {
543 if call.Prompt == "" && !message.ContainsTextAttachment(call.Attachments) {
188− return nil, ErrEmptyPrompt
544+ return ErrEmptyPrompt
189 }
545 }
190 if call.SessionID == "" {
546 if call.SessionID == "" {
191− return nil, ErrSessionMissing
547+ return ErrSessionMissing
192− }
548+ }
193−
549+ return nil
194− // Queue the message if busy. Strip OnComplete: the caller that
550+}
195− // supplied the hook (typically coordinator.Run) has its own
551+
196− // retry/coalesce scope that ends when it returns, so by the time
552+func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *fantasy.AgentResult, retErr error) {
197− // the queue drains nobody is left to consume the buffered
553+ if err := ValidateCall(call); err != nil {
198− // terminal event. The recursive Run will fall back to the
554+ return nil, err
199− // default broker publish, which is what existing subscribers
555+ }
200− // expect for queued turns.
556+
557+ // genCtx/cancel are the run context and its cancel func. For the
558+ // accepted (fire-and-forget) dispatch path they are created under
559+ // dispatchMu below so a concurrent Cancel can observe the
560+ // activeRequests entry before the assistant message exists. For
561+ // the in-process path they stay nil here and are created later,
562+ // preserving the original ordering.
563+ var (
564+ genCtx context.Context
565+ cancel context.CancelFunc
566+ activeRegistered bool
567+ userMsgCreated bool
568+ )
569+
570+ if call.Accepted != nil {
571+ // Serialize the accepted -> (cancel-on-entry | queued |
572+ // active) transition against a concurrent Cancel. Cancel takes
573+ // the same per-session lock, so every cancel observes at least
574+ // one of: a cancel mark, an activeRequests entry, or a
575+ // messageQueue entry it then clears.
576+ mu := a.sessionMu(call.SessionID)
577+ mu.Lock()
578+
579+ if a.canceledBySeq(call.SessionID, call.Accepted.seq) {
580+ // Cancel-on-entry: a cancel arrived while this run was
581+ // dispatched but not yet active, and this handle's accept
582+ // sequence is at or below the session's cancel mark. The
583+ // mark is left in place so sibling handles it also covers
584+ // observe the same cancel; release the accept reservation,
585+ // drop the lock, and persist a canceled turn without
586+ // entering Stream.
587+ //
588+ // This path returns before the streaming defer that
589+ // publishes RunComplete is installed, so emit the terminal
590+ // event explicitly. Without it, a caller waiting on
591+ // RunComplete for this RunID (e.g. `crush run`, which
592+ // ignores message events and blocks on RunComplete) would
593+ // hang on an immediately-canceled accepted run.
594+ call.Accepted.Close()
595+ mu.Unlock()
596+ complete := notify.RunComplete{
597+ SessionID: call.SessionID,
598+ RunID: call.RunID,
599+ Cancelled: true,
600+ }
601+ if err := a.persistCanceledTurn(ctx, call, false); err != nil {
602+ complete.Error = err.Error()
603+ a.publishRunComplete(ctx, call, complete)
604+ return nil, err
605+ }
606+ a.publishRunComplete(ctx, call, complete)
607+ return nil, nil
608+ }
609+
201− if a.IsSessionBusy(call.SessionID) {
610+ if a.IsSessionBusy(call.SessionID) {
202− existing, ok := a.messageQueue.Get(call.SessionID)
611+ // Busy: an earlier prompt is active. Queue this call and
203− if !ok {
612+ // release the accept reservation. A Cancel arriving after
204− existing = []SessionAgentCall{}
613+ // this point sees the active entry and clears the queue.
614+ a.enqueueCall(call)
615+ call.Accepted.Close()
616+ mu.Unlock()
617+ return nil, nil
205 }
618 }
206− queued := call
619+
207− queued.OnComplete = nil
620+ // Idle: become the active run. Register the cancel func before
208− existing = append(existing, queued)
621+ // dropping the lock so a Cancel that arrives between here and
209− a.messageQueue.Set(call.SessionID, existing)
622+ // assistant creation is not lost.
623+ runCtx := context.WithValue(ctx, tools.SessionIDContextKey, call.SessionID)
624+ genCtx, cancel = context.WithCancel(runCtx)
625+ a.activeRequests.Set(call.SessionID, cancel)
626+ activeRegistered = true
627+ call.Accepted.Close()
628+ mu.Unlock()
629+
630+ defer cancel()
631+ defer a.activeRequests.Del(call.SessionID)
632+ } else if a.IsSessionBusy(call.SessionID) {
633+ // Queue the message if busy. Strip OnComplete: the caller that
634+ // supplied the hook (typically coordinator.Run) has its own
635+ // retry/coalesce scope that ends when it returns, so by the time
636+ // the queue drains nobody is left to consume the buffered
637+ // terminal event. The recursive Run will fall back to the
638+ // default broker publish, which is what existing subscribers
639+ // expect for queued turns.
640+ a.enqueueCall(call)
210 return nil, nil
641 return nil, nil
211 }
642 }
212
643
213 // Copy mutable fields under lock to avoid races with SetTools/SetModels.
644 // Copy mutable fields under lock to avoid races with SetTools/SetModels.
214 agentTools := a.tools.Copy()
645 agentTools := a.tools.Copy()
646+ // Per-step tool snapshot reused across PrepareStep calls; only
647+ // re-copied when SetTools bumps toolsGen (see PrepareStep below).
648+ var (
649+ stepTools []fantasy.AgentTool
650+ stepToolsGen uint64
651+ stepToolsInit bool
652+ )
215 largeModel := a.largeModel.Get()
653 largeModel := a.largeModel.Get()
216 systemPrompt := a.systemPrompt.Get()
654 systemPrompt := a.systemPrompt.Get()
217 promptPrefix := a.systemPromptPrefix.Get()
655 promptPrefix := a.systemPromptPrefix.Get()
@@ -255,11 +693,11 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
255 }
693 }
256
694
257 var wg sync.WaitGroup
695 var wg sync.WaitGroup
258− // Generate title if first message.
696+ // Generate title from the first real (non-shell) user prompt.
259− if len(msgs) == 0 {
697+ if !hasUserTextMessage(msgs) {
260 titleCtx := ctx // Copy to avoid race with ctx reassignment below.
698 titleCtx := ctx // Copy to avoid race with ctx reassignment below.
261 wg.Go(func() {
699 wg.Go(func() {
262− a.generateTitle(titleCtx, call.SessionID, call.Prompt)
700+ a.GenerateTitle(titleCtx, call.SessionID, call.Prompt)
263 })
701 })
264 }
702 }
265 defer wg.Wait()
703 defer wg.Wait()
@@ -269,15 +707,22 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
269 if err != nil {
707 if err != nil {
270 return nil, err
708 return nil, err
271 }
709 }
710+ userMsgCreated = true
272
711
273 // Add the session to the context.
712 // Add the session to the context.
274 ctx = context.WithValue(ctx, tools.SessionIDContextKey, call.SessionID)
713 ctx = context.WithValue(ctx, tools.SessionIDContextKey, call.SessionID)
275
714
715+ // For the accepted dispatch path the run context and cancel func
716+ // were already created and registered under dispatchMu above; reuse
717+ // them. For the in-process path create them here, preserving the
718+ // original ordering.
719+ if !activeRegistered {
276− genCtx, cancel := context.WithCancel(ctx)
720+ genCtx, cancel = context.WithCancel(ctx)
277− a.activeRequests.Set(call.SessionID, cancel)
721+ a.activeRequests.Set(call.SessionID, cancel)
278
722
279− defer cancel()
723+ defer cancel()
280− defer a.activeRequests.Del(call.SessionID)
724+ defer a.activeRequests.Del(call.SessionID)
725+ }
281 // skipRunComplete is set just before the queued-recursion path so
726 // skipRunComplete is set just before the queued-recursion path so
282 // the outer Run doesn't publish a RunComplete that would race
727 // the outer Run doesn't publish a RunComplete that would race
283 // with — and be superseded by — the recursive call's own
728 // with — and be superseded by — the recursive call's own
@@ -305,7 +750,13 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
305 // (the pubsub broker fan-in does not serialize publishes from
750 // (the pubsub broker fan-in does not serialize publishes from
306 // different upstream brokers).
751 // different upstream brokers).
307 defer func() {
752 defer func() {
753+ // Use a context detached from the run context: workspace
754+ // shutdown cancels ctx before this goroutine returns, but the
755+ // buffered streaming deltas must still land before the DB is
756+ // closed. A short timeout bounds the flush.
757+ flushCtx, flushCancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
758+ defer flushCancel()
308− if flushErr := a.messages.FlushAll(ctx); flushErr != nil {
759+ if flushErr := a.messages.FlushAll(flushCtx); flushErr != nil {
309 slog.Error("Failed to flush pending message updates after run", "error", flushErr)
760 slog.Error("Failed to flush pending message updates after run", "error", flushErr)
310 }
761 }
311 if skipRunComplete {
762 if skipRunComplete {
@@ -329,14 +780,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
329 // the authoritative terminal event so a momentarily-full
780 // the authoritative terminal event so a momentarily-full
330 // subscriber channel can't silently drop it and hang
781 // subscriber channel can't silently drop it and hang
331 // non-interactive clients waiting on RunComplete.
782 // non-interactive clients waiting on RunComplete.
332− if call.OnComplete != nil {
783+ a.publishRunComplete(ctx, call, complete)
333− call.OnComplete(complete)
334− return
335− }
336− if a.runComplete == nil {
337− return
338− }
339− a.runComplete.PublishMustDeliver(ctx, pubsub.UpdatedEvent, complete)
340 }()
784 }()
341
785
342 history, files := a.preparePrompt(msgs, largeModel.CatwalkCfg.SupportsImages, call.Attachments...)
786 history, files := a.preparePrompt(msgs, largeModel.CatwalkCfg.SupportsImages, call.Attachments...)
@@ -346,6 +790,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
346
790
347 var stepMessages []fantasy.Message
791 var stepMessages []fantasy.Message
348 var shouldSummarize bool
792 var shouldSummarize bool
793+ sanitizedToolCalls := make(map[string]bool)
349 // Don't send MaxOutputTokens if 0 — some providers (e.g. LM Studio) reject it
794 // Don't send MaxOutputTokens if 0 — some providers (e.g. LM Studio) reject it
350 var maxOutputTokens *int64
795 var maxOutputTokens *int64
351 if call.MaxOutputTokens > 0 {
796 if call.MaxOutputTokens > 0 {
@@ -369,11 +814,29 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
369 }
814 }
370
815
371 // Use latest tools (updated by SetTools when MCP tools change).
816 // Use latest tools (updated by SetTools when MCP tools change).
817+ // Reuse the previous step's copy unless SetTools has bumped the
818+ // generation, so an unchanged tool set isn't re-copied every step.
819+ if gen := a.toolsGen.Load(); !stepToolsInit || gen != stepToolsGen {
820+ stepTools = a.tools.Copy()
821+ stepToolsGen = gen
822+ stepToolsInit = true
823+ }
372− prepared.Tools = a.tools.Copy()
824+ prepared.Tools = stepTools
373−
825+
374− queuedCalls, _ := a.messageQueue.Get(call.SessionID)
826+ // Drain queued follow-up prompts for this step. Calls covered
375− a.messageQueue.Del(call.SessionID)
827+ // by a cancel recorded while they sat in the queue are dropped:
828+ // a cancel that arrived after a prompt was queued must not let
829+ // it run as part of this step. Coverage is per-call by accept
830+ // sequence so a follow-up queued after the cancel (higher seq)
831+ // is not dropped. A dropped prompt carrying a RunID still gets
832+ // its terminal cancelled RunComplete so a caller waiting on it
833+ // does not hang. Uncanceled prompts without a RunID are folded
834+ // into this turn; uncanceled prompts with a RunID are left
835+ // queued so each runs as its own turn (with its own
836+ // RunComplete) via the recursive run path below.
837+ fold, canceledRunIDs := a.drainQueueForStep(call.SessionID)
838+ a.publishCanceledQueueDrops(canceledRunIDs)
376− for _, queued := range queuedCalls {
839+ for _, queued := range fold {
377 userMessage, createErr := a.createUserMessage(callContext, queued)
840 userMessage, createErr := a.createUserMessage(callContext, queued)
378 if createErr != nil {
841 if createErr != nil {
379 return callContext, prepared, createErr
842 return callContext, prepared, createErr
@@ -403,9 +866,12 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
403 prepared.Messages = append([]fantasy.Message{fantasy.NewSystemMessage(promptPrefix)}, prepared.Messages...)
866 prepared.Messages = append([]fantasy.Message{fantasy.NewSystemMessage(promptPrefix)}, prepared.Messages...)
404 }
867 }
405
868
406− sessionLock.Lock()
869+ // Save a reference to the prepared messages for token
870+ // estimation in OnStepFinish. No clone needed here — the
871+ // messages are not modified between PrepareStep and
872+ // OnStepFinish (which run sequentially), and the clone is
873+ // only needed when the provider returns zero usage.
407− stepMessages = cloneFantasyMessages(prepared.Messages)
874+ stepMessages = prepared.Messages
408− sessionLock.Unlock()
409
875
410 var assistantMsg message.Message
876 var assistantMsg message.Message
411 assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
877 assistantMsg, err = a.messages.Create(callContext, call.SessionID, message.CreateMessageParams{
@@ -478,10 +944,14 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
478 slog.Warn("Provider request failed, retrying", providerRetryLogFields(err, delay)...)
944 slog.Warn("Provider request failed, retrying", providerRetryLogFields(err, delay)...)
479 },
945 },
480 OnToolCall: func(tc fantasy.ToolCallContent) error {
946 OnToolCall: func(tc fantasy.ToolCallContent) error {
947+ input, wasSanitized := sanitizeToolInput(tc.ToolName, tc.ToolCallID, tc.Input)
948+ if wasSanitized {
949+ sanitizedToolCalls[tc.ToolCallID] = true
950+ }
481 toolCall := message.ToolCall{
951 toolCall := message.ToolCall{
482 ID: tc.ToolCallID,
952 ID: tc.ToolCallID,
483 Name: tc.ToolName,
953 Name: tc.ToolName,
484− Input: tc.Input,
954+ Input: input,
485 ProviderExecuted: false,
955 ProviderExecuted: false,
486 Finished: true,
956 Finished: true,
487 }
957 }
@@ -492,6 +962,10 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
492 },
962 },
493 OnToolResult: func(result fantasy.ToolResultContent) error {
963 OnToolResult: func(result fantasy.ToolResultContent) error {
494 toolResult := a.convertToToolResult(result)
964 toolResult := a.convertToToolResult(result)
965+ if sanitizedToolCalls[result.ToolCallID] {
966+ toolResult.Content = "Tool call failed: arguments were not valid JSON. Please check your tool call format and try again."
967+ toolResult.IsError = true
968+ }
495 // Use parent ctx instead of genCtx to ensure the message is created
969 // Use parent ctx instead of genCtx to ensure the message is created
496 // even if the request is canceled mid-stream
970 // even if the request is canceled mid-stream
497 _, createMsgErr := a.messages.Create(ctx, currentAssistant.SessionID, message.CreateMessageParams{
971 _, createMsgErr := a.messages.Create(ctx, currentAssistant.SessionID, message.CreateMessageParams{
@@ -503,6 +977,9 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
503 return createMsgErr
977 return createMsgErr
504 },
978 },
505 OnStepFinish: func(stepResult fantasy.StepResult) error {
979 OnStepFinish: func(stepResult fantasy.StepResult) error {
980+ for _, w := range stepResult.Warnings {
981+ slog.Warn("Provider warning", "type", w.Type, "message", w.Message)
982+ }
506 finishReason := message.FinishReasonUnknown
983 finishReason := message.FinishReasonUnknown
507 switch stepResult.FinishReason {
984 switch stepResult.FinishReason {
508 case fantasy.FinishReasonLength:
985 case fantasy.FinishReasonLength:
@@ -534,6 +1011,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
534 }
1011 }
535 usage, estimated := fallbackStepUsage(stepMessages, stepResult)
1012 usage, estimated := fallbackStepUsage(stepMessages, stepResult)
536 a.updateSessionUsage(largeModel, &updatedSession, usage, a.openrouterCost(stepResult.ProviderMetadata), estimated)
1013 a.updateSessionUsage(largeModel, &updatedSession, usage, a.openrouterCost(stepResult.ProviderMetadata), estimated)
1014+ extractHyperCredits(stepResult.ProviderMetadata)
537 _, sessionErr := a.sessions.Save(ctx, updatedSession)
1015 _, sessionErr := a.sessions.Save(ctx, updatedSession)
538 if sessionErr != nil {
1016 if sessionErr != nil {
539 return sessionErr
1017 return sessionErr
@@ -575,13 +1053,36 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
575 isHyper := largeModel.ModelCfg.Provider == hyper.Name
1053 isHyper := largeModel.ModelCfg.Provider == hyper.Name
576 isCancelErr := errors.Is(err, context.Canceled)
1054 isCancelErr := errors.Is(err, context.Canceled)
577 if currentAssistant == nil {
1055 if currentAssistant == nil {
1056+ // Cancel-before-assistant-creation window: the run was
1057+ // canceled after activeRequests.Set but before PrepareStep
1058+ // created the assistant message. Without this, the turn
1059+ // would return with no FinishReasonCanceled marker and no
1060+ // user-visible record. The user message was already created
1061+ // above, so persistCanceledTurn only writes the assistant
1062+ // record.
1063+ if isCancelErr {
1064+ if persistErr := a.persistCanceledTurn(ctx, call, userMsgCreated); persistErr != nil {
1065+ return nil, persistErr
1066+ }
1067+ }
578 return result, err
1068 return result, err
579 }
1069 }
1070+ // Persist final state with a context detached from the run
1071+ // context. The run context (ctx) is derived from the
1072+ // workspace context, which workspace shutdown cancels before
1073+ // agent goroutines finish; using ctx here would drop the
1074+ // final assistant state. WithoutCancel keeps the values
1075+ // (e.g. session ID) while ignoring cancellation, and a short
1076+ // timeout bounds the cleanup writes.
1077+ cleanupCtx, cleanupCancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
1078+ defer cleanupCancel()
580 // Ensure we finish thinking on error to close the reasoning state.
1079 // Ensure we finish thinking on error to close the reasoning state.
581 currentAssistant.FinishThinking()
1080 currentAssistant.FinishThinking()
582 toolCalls := currentAssistant.ToolCalls()
1081 toolCalls := currentAssistant.ToolCalls()
583− // INFO: we use the parent context here because the genCtx has been cancelled.
1082+ // INFO: we use the cleanup context here because the genCtx has been cancelled.
1083+ // Only load messages from the current assistant message onward — tool
1084+ // results for this turn's tool calls can only exist after it.
584− msgs, createErr := a.messages.List(ctx, currentAssistant.SessionID)
1085+ msgs, createErr := a.messages.ListAfter(cleanupCtx, currentAssistant.SessionID, currentAssistant.ID)
585 if createErr != nil {
1086 if createErr != nil {
586 return nil, createErr
1087 return nil, createErr
587 }
1088 }
@@ -590,7 +1091,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
590 tc.Finished = true
1091 tc.Finished = true
591 tc.Input = "{}"
1092 tc.Input = "{}"
592 currentAssistant.AddToolCall(tc)
1093 currentAssistant.AddToolCall(tc)
593− updateErr := a.messages.Update(ctx, *currentAssistant)
1094+ updateErr := a.messages.Update(cleanupCtx, *currentAssistant)
594 if updateErr != nil {
1095 if updateErr != nil {
595 return nil, updateErr
1096 return nil, updateErr
596 }
1097 }
@@ -623,7 +1124,7 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
623 Content: content,
1124 Content: content,
624 IsError: true,
1125 IsError: true,
625 }
1126 }
626− _, createErr = a.messages.Create(ctx, currentAssistant.SessionID, message.CreateMessageParams{
1127+ _, createErr = a.messages.Create(cleanupCtx, currentAssistant.SessionID, message.CreateMessageParams{
627 Role: message.Tool,
1128 Role: message.Tool,
628 Parts: []message.ContentPart{
1129 Parts: []message.ContentPart{
629 toolResult,
1130 toolResult,
@@ -662,9 +1163,9 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
662 } else {
1163 } else {
663 currentAssistant.AddFinish(message.FinishReasonError, defaultTitle, err.Error())
1164 currentAssistant.AddFinish(message.FinishReasonError, defaultTitle, err.Error())
664 }
1165 }
665− // Note: we use the parent context here because the genCtx has been
1166+ // Note: we use the cleanup context here because the genCtx has been
666 // cancelled.
1167 // cancelled.
667− updateErr := a.messages.Update(ctx, *currentAssistant)
1168+ updateErr := a.messages.Update(cleanupCtx, *currentAssistant)
668 if updateErr != nil {
1169 if updateErr != nil {
669 return nil, updateErr
1170 return nil, updateErr
670 }
1171 }
@@ -705,18 +1206,106 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (result *
705 })
1206 })
706 }
1207 }
707
1208
1209+ // Hand off to the next queued prompt (if any) under dispatchMu so
1210+ // the transition from this finished run to the queued run is atomic
1211+ // against a concurrent Cancel. activeRequests for this session was
1212+ // just deleted above, so without the lock there is a window in
1213+ // which the session looks idle and a cancel becomes a no-op that
1214+ // fails to stop the queued prompt. Holding the lock lets us observe
1215+ // a pending cancel recorded against the session and drop the queue
1216+ // instead of running it, and (for the recursion) hand a fresh
1217+ // accept reservation to the dequeued call so acceptedRuns stays > 0
1218+ // across the recursive Run's own dispatch handoff — keeping the
1219+ // session observable to Cancel for the entire transition and
1220+ // closing the dequeue -> re-register window.
1221+ mu := a.sessionMu(call.SessionID)
1222+ mu.Lock()
708− queuedMessages, ok := a.messageQueue.Get(call.SessionID)
1223+ queuedMessages, _ := a.messageQueue.Get(call.SessionID)
1224+ if mark, ok := a.cancelMark.Get(call.SessionID); ok && mark > 0 && len(queuedMessages) > 0 {
1225+ // A cancel was recorded for this session (e.g. it arrived while
1226+ // this run was active and follow-ups had been queued). Drop the
1227+ // queued prompts it covers (accept sequence at or below the
1228+ // mark, or untracked); keep any queued after the cancel (higher
1229+ // sequence) so they still run.
1230+ var kept []SessionAgentCall
1231+ var canceledRunIDDrops []SessionAgentCall
1232+ for _, q := range queuedMessages {
1233+ if q.acceptSeq == 0 || q.acceptSeq <= mark {
1234+ if q.RunID != "" {
1235+ canceledRunIDDrops = append(canceledRunIDDrops, q)
1236+ }
1237+ continue
1238+ }
1239+ kept = append(kept, q)
1240+ }
1241+ queuedMessages = kept
1242+ a.messageQueue.Set(call.SessionID, kept)
1243+ // A dropped prompt carrying a RunID must still publish its
1244+ // terminal cancelled RunComplete so a caller waiting on that
1245+ // RunID does not hang.
1246+ a.publishCanceledQueueDrops(canceledRunIDDrops)
1247+ }
709− if !ok || len(queuedMessages) == 0 {
1248+ if len(queuedMessages) == 0 {
1249+ // No queued work. Clear the cancel mark only when no accepted
1250+ // run remains in flight that it might still cover; otherwise a
1251+ // sibling prompt (sequence at or below the mark) waiting to
1252+ // enter Run would lose its cancellation. When accepted runs are
1253+ // gone, this also clears a stale mark so it can't catch a
1254+ // future run.
1255+ a.messageQueue.Del(call.SessionID)
1256+ a.acceptedMu.Lock()
1257+ inFlight, _ := a.acceptedRuns.Get(call.SessionID)
1258+ a.acceptedMu.Unlock()
1259+ if inFlight == 0 {
1260+ a.cancelMark.Del(call.SessionID)
1261+ }
1262+ mu.Unlock()
710 return result, err
1263 return result, err
711 }
1264 }
712− // There are queued messages restart the loop. The recursive Run
1265+ // There are queued messages, restart the loop. Suppress the outer
713− // publishes its own RunComplete for the queued prompt, so suppress
1266+ // defer's emit: it would otherwise observe the recursive Run's retErr
714− // the outer defer's emit to avoid a duplicate event whose Error
1267+ // (named-return clobbering through the return below) against this
715− // field would belong to the recursive turn but whose MessageID/Text
1268+ // turn's MessageID/Text and publish a mixed, racing event.
716− // would belong to the outer turn.
717 skipRunComplete = true
1269 skipRunComplete = true
1270+ // Decide whether this turn still owes its own terminal RunComplete.
1271+ // Each submitted prompt with a RunID has its own lifecycle, so a turn
1272+ // that is finished and handing off to a *different* queued prompt must
1273+ // publish its own RunComplete here — leaving it to the recursive turn
1274+ // (which carries a different RunID) would hang a caller waiting on
1275+ // this turn's RunID. The exception is the summarize-continuation path,
1276+ // which re-queues this same call (same RunID) to resume after a
1277+ // summary; in that case the eventual terminal turn for this RunID
1278+ // publishes, so publishing now would double-emit.
1279+ outerOwesRunComplete := call.RunID != ""
1280+ if outerOwesRunComplete {
1281+ for _, q := range queuedMessages {
1282+ if q.RunID == call.RunID {
1283+ outerOwesRunComplete = false
1284+ break
1285+ }
1286+ }
1287+ }
718 firstQueuedMessage := queuedMessages[0]
1288 firstQueuedMessage := queuedMessages[0]
719 a.messageQueue.Set(call.SessionID, queuedMessages[1:])
1289 a.messageQueue.Set(call.SessionID, queuedMessages[1:])
1290+ // Reserve a fresh accept for the dequeued prompt before dropping the
1291+ // lock so acceptedRuns > 0 across the handoff into the recursive
1292+ // Run. This closes the window between this dequeue and the recursive
1293+ // Run registering its activeRequests entry: a cancel arriving in
1294+ // that window now records a pending cancel (acceptedRuns > 0) that
1295+ // the recursive Run's accepted path observes as cancel-on-entry.
1296+ firstQueuedMessage.Accepted = a.BeginAccepted(call.SessionID)
1297+ mu.Unlock()
1298+ if outerOwesRunComplete {
1299+ complete := notify.RunComplete{SessionID: call.SessionID, RunID: call.RunID}
1300+ if currentAssistant != nil {
1301+ complete.MessageID = currentAssistant.ID
1302+ complete.Text = currentAssistant.Content().String()
1303+ }
1304+ if ctx.Err() != nil {
1305+ complete.Cancelled = true
1306+ }
1307+ a.publishRunComplete(ctx, call, complete)
1308+ }
720 return a.Run(ctx, firstQueuedMessage)
1309 return a.Run(ctx, firstQueuedMessage)
721}
1310}
722
1311
@@ -833,6 +1422,7 @@ func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fan
833 }
1422 }
834 openrouterCost = &newCost
1423 openrouterCost = &newCost
835 }
1424 }
1425+ extractHyperCredits(step.ProviderMetadata)
836 }
1426 }
837
1427
838 a.updateSessionUsage(largeModel, &currentSession, resp.TotalUsage, openrouterCost, false)
1428 a.updateSessionUsage(largeModel, &currentSession, resp.TotalUsage, openrouterCost, false)
@@ -864,7 +1454,10 @@ func (a *sessionAgent) Summarize(ctx context.Context, sessionID string, opts fan
864 return qErr
1454 return qErr
865}
1455}
866
1456
1457+// cacheControlOptions is computed once for the process lifetime: the env check
1458+// is constant and callers only read (never mutate) the returned map, so the
1459+// same shared value can be reused across the ~3 calls per step.
867−func (a *sessionAgent) getCacheControlOptions() fantasy.ProviderOptions {
1460+var cacheControlOptions = sync.OnceValue(func() fantasy.ProviderOptions {
868 if t, _ := strconv.ParseBool(os.Getenv("CRUSH_DISABLE_ANTHROPIC_CACHE")); t {
1461 if t, _ := strconv.ParseBool(os.Getenv("CRUSH_DISABLE_ANTHROPIC_CACHE")); t {
869 return fantasy.ProviderOptions{}
1462 return fantasy.ProviderOptions{}
870 }
1463 }
@@ -879,6 +1472,10 @@ func (a *sessionAgent) getCacheControlOptions() fantasy.ProviderOptions {
879 CacheControl: anthropic.CacheControl{Type: "ephemeral"},
1472 CacheControl: anthropic.CacheControl{Type: "ephemeral"},
880 },
1473 },
881 }
1474 }
1475+})
1476+
1477+func (a *sessionAgent) getCacheControlOptions() fantasy.ProviderOptions {
1478+ return cacheControlOptions()
882}
1479}
883
1480
884func (a *sessionAgent) createUserMessage(ctx context.Context, call SessionAgentCall) (message.Message, error) {
1481func (a *sessionAgent) createUserMessage(ctx context.Context, call SessionAgentCall) (message.Message, error) {
@@ -899,7 +1496,7 @@ func (a *sessionAgent) createUserMessage(ctx context.Context, call SessionAgentC
899}
1496}
900
1497
901func (a *sessionAgent) preparePrompt(msgs []message.Message, supportsImages bool, attachments ...message.Attachment) ([]fantasy.Message, []fantasy.FilePart) {
1498func (a *sessionAgent) preparePrompt(msgs []message.Message, supportsImages bool, attachments ...message.Attachment) ([]fantasy.Message, []fantasy.FilePart) {
902− var history []fantasy.Message
1499+ history := make([]fantasy.Message, 0, len(msgs)+1)
903 if !a.isSubAgent {
1500 if !a.isSubAgent {
904 history = append(history, fantasy.NewUserMessage(
1501 history = append(history, fantasy.NewUserMessage(
905 fmt.Sprintf(
1502 fmt.Sprintf(
@@ -999,7 +1596,7 @@ func filterOrphanedToolResults(m message.Message, knownToolCallIDs map[string]st
999 if len(aiMsgs) == 0 {
1596 if len(aiMsgs) == 0 {
1000 return fantasy.Message{}, false
1597 return fantasy.Message{}, false
1001 }
1598 }
1002− var validParts []fantasy.MessagePart
1599+ validParts := make([]fantasy.MessagePart, 0, len(aiMsgs[0].Content))
1003 for _, part := range aiMsgs[0].Content {
1600 for _, part := range aiMsgs[0].Content {
1004 tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](part)
1601 tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](part)
1005 if !ok {
1602 if !ok {
@@ -1031,7 +1628,7 @@ func filterOrphanedToolResults(m message.Message, knownToolCallIDs map[string]st
1031// conversation. Returns the message and true if any synthetic results were
1628// conversation. Returns the message and true if any synthetic results were
1032// produced.
1629// produced.
1033func syntheticToolResultsForOrphanedCalls(m message.Message, knownToolResultIDs map[string]struct{}) (fantasy.Message, bool) {
1630func syntheticToolResultsForOrphanedCalls(m message.Message, knownToolResultIDs map[string]struct{}) (fantasy.Message, bool) {
1034− var syntheticParts []fantasy.MessagePart
1631+ syntheticParts := make([]fantasy.MessagePart, 0, len(m.ToolCalls()))
1035 for _, tc := range m.ToolCalls() {
1632 for _, tc := range m.ToolCalls() {
1036 if _, hasResult := knownToolResultIDs[tc.ID]; hasResult {
1633 if _, hasResult := knownToolResultIDs[tc.ID]; hasResult {
1037 continue
1634 continue
@@ -1058,42 +1655,63 @@ func syntheticToolResultsForOrphanedCalls(m message.Message, knownToolResultIDs
1058}
1655}
1059
1656
1060func (a *sessionAgent) getSessionMessages(ctx context.Context, session session.Session) ([]message.Message, error) {
1657func (a *sessionAgent) getSessionMessages(ctx context.Context, session session.Session) ([]message.Message, error) {
1658+ if session.SummaryMessageID != "" {
1659+ msgs, err := a.messages.ListAfter(ctx, session.ID, session.SummaryMessageID)
1660+ if err != nil {
1661+ return nil, fmt.Errorf("failed to list messages after summary: %w", err)
1662+ }
1663+ if len(msgs) > 0 {
1664+ msgs[0].Role = message.User
1665+ }
1666+ return msgs, nil
1667+ }
1668+
1061 msgs, err := a.messages.List(ctx, session.ID)
1669 msgs, err := a.messages.List(ctx, session.ID)
1062 if err != nil {
1670 if err != nil {
1063 return nil, fmt.Errorf("failed to list messages: %w", err)
1671 return nil, fmt.Errorf("failed to list messages: %w", err)
1064 }
1672 }
1673+ return msgs, nil
1674+}
1065
1675
1066− if session.SummaryMessageID != "" {
1676+// hasUserTextMessage reports whether any user message in msgs contains
1067− summaryMsgIndex := -1
1677+// text content (as opposed to only shell commands or other non-text parts).
1678+func hasUserTextMessage(msgs []message.Message) bool {
1068− for i, msg := range msgs {
1679+ for _, msg := range msgs {
1069− if msg.ID == session.SummaryMessageID {
1680+ if msg.Role != message.User {
1070− summaryMsgIndex = i
1681+ continue
1071− break
1072− }
1073 }
1682 }
1074− if summaryMsgIndex != -1 {
1683+ for _, part := range msg.Parts {
1075− msgs = msgs[summaryMsgIndex:]
1684+ if tc, ok := part.(message.TextContent); ok && tc.Text != "" {
1076− msgs[0].Role = message.User
1685+ return true
1686+ }
1077 }
1687 }
1078 }
1688 }
1079− return msgs, nil
1689+ return false
1080}
1690}
1081
1691
1082−// generateTitle generates a session titled based on the initial prompt.
1692+// GenerateTitle generates a session title based on the initial prompt.
1083−func (a *sessionAgent) generateTitle(ctx context.Context, sessionID string, userPrompt string) {
1693+func (a *sessionAgent) GenerateTitle(ctx context.Context, sessionID string, userPrompt string) {
1084 if userPrompt == "" {
1694 if userPrompt == "" {
1085 return
1695 return
1086 }
1696 }
1087
1697
1698+ // Ensure the session always gets a title even if every path below
1699+ // fails or the context is cancelled before we finish.
1700+ var titleSaved bool
1701+ defer func() {
1702+ if !titleSaved {
1703+ fallbackCtx, cancel := context.WithTimeout(context.WithoutCancel(ctx), 5*time.Second)
1704+ defer cancel()
1705+ if err := a.sessions.Rename(fallbackCtx, sessionID, DefaultSessionName); err != nil {
1706+ slog.Error("Failed to save fallback session title", "error", err)
1707+ }
1708+ }
1709+ }()
1710+
1088 smallModel := a.smallModel.Get()
1711 smallModel := a.smallModel.Get()
1089 largeModel := a.largeModel.Get()
1712 largeModel := a.largeModel.Get()
1090 systemPromptPrefix := a.systemPromptPrefix.Get()
1713 systemPromptPrefix := a.systemPromptPrefix.Get()
1091
1714
1092− var maxOutputTokens int64 = 40
1093− if smallModel.CatwalkCfg.CanReason {
1094− maxOutputTokens = smallModel.CatwalkCfg.DefaultMaxTokens
1095− }
1096−
1097 newAgent := func(m fantasy.LanguageModel, p []byte, tok int64) fantasy.Agent {
1715 newAgent := func(m fantasy.LanguageModel, p []byte, tok int64) fantasy.Agent {
1098 return fantasy.NewAgent(
1716 return fantasy.NewAgent(
1099 m,
1717 m,
@@ -1116,41 +1734,40 @@ func (a *sessionAgent) generateTitle(ctx context.Context, sessionID string, user
1116 },
1734 },
1117 }
1735 }
1118
1736
1119− // Use the small model to generate the title.
1737+ type modelAttempt struct {
1738+ name string
1739+ model Model
1740+ }
1741+ attempts := []modelAttempt{
1120− model := smallModel
1742+ {"small", smallModel},
1121− agent := newAgent(model.Model, titlePrompt, maxOutputTokens)
1743+ {"large", largeModel},
1122− resp, err := agent.Stream(ctx, streamCall)
1744+ }
1123− if err == nil {
1745+
1124− // We successfully generated a title with the small model.
1746+ var resp *fantasy.AgentResult
1125− slog.Debug("Generated title with small model")
1747+ var err error
1126− } else {
1748+ var model Model
1127− // It didn't work. Let's try with the big model.
1749+ var success bool
1128− slog.Error("Error generating title with small model; trying big model", "err", err)
1750+ for _, attempt := range attempts {
1129− model = largeModel
1751+ tok := int64(40)
1752+ if attempt.model.CatwalkCfg.CanReason {
1753+ tok = attempt.model.CatwalkCfg.DefaultMaxTokens
1754+ }
1130− agent = newAgent(model.Model, titlePrompt, maxOutputTokens)
1755+ agent := newAgent(attempt.model.Model, titlePrompt, tok)
1131 resp, err = agent.Stream(ctx, streamCall)
1756 resp, err = agent.Stream(ctx, streamCall)
1132− if err == nil {
1757+ if err == nil && resp.Response.FinishReason != fantasy.FinishReasonLength {
1758+ model = attempt.model
1133− slog.Debug("Generated title with large model")
1759+ slog.Debug("Generated title with " + attempt.name + " model")
1760+ success = true
1761+ break
1762+ }
1763+ if err != nil {
1764+ slog.Error("Error generating title with "+attempt.name+" model; trying next", "err", err)
1134 } else {
1765 } else {
1135− // Welp, the large model didn't work either. Use the default
1766+ slog.Error("Title generation hit token limit with " + attempt.name + " model; trying next")
1136− // session name and return.
1137− slog.Error("Error generating title with large model", "err", err)
1138− saveErr := a.sessions.Rename(ctx, sessionID, DefaultSessionName)
1139− if saveErr != nil {
1140− slog.Error("Failed to save session title", "error", saveErr)
1141− }
1142− return
1143 }
1767 }
1144 }
1768 }
1145−
1769+ if !success {
1146− if resp == nil {
1770+ // The deferred fallback will save the default session name.
1147− // Actually, we didn't get a response so we can't. Use the default
1148− // session name and return.
1149− slog.Error("Response is nil; can't generate title")
1150− saveErr := a.sessions.Rename(ctx, sessionID, DefaultSessionName)
1151− if saveErr != nil {
1152− slog.Error("Failed to save session title", "error", saveErr)
1153− }
1154 return
1771 return
1155 }
1772 }
1156
1773
@@ -1163,7 +1780,17 @@ func (a *sessionAgent) generateTitle(ctx context.Context, sessionID string, user
1163 title = orphanThinkTagRegex.ReplaceAllString(title, "")
1780 title = orphanThinkTagRegex.ReplaceAllString(title, "")
1164
1781
1165 title = strings.TrimSpace(title)
1782 title = strings.TrimSpace(title)
1783+ if title == "" {
1784+ // LLM returned empty content. Use the prompt itself as a
1785+ // fallback title, truncated to 50 chars, before resorting to
1786+ // the generic default.
1787+ fallback := strings.ReplaceAll(userPrompt, "\n", " ")
1788+ fallback = strings.TrimSpace(fallback)
1789+ if len(fallback) > 50 {
1790+ fallback = ansi.Truncate(fallback, 50, "…")
1791+ }
1166− title = cmp.Or(title, DefaultSessionName)
1792+ title = cmp.Or(fallback, DefaultSessionName)
1793+ }
1167
1794
1168 // Calculate usage and cost.
1795 // Calculate usage and cost.
1169 var openrouterCost *float64
1796 var openrouterCost *float64
@@ -1176,6 +1803,7 @@ func (a *sessionAgent) generateTitle(ctx context.Context, sessionID string, user
1176 }
1803 }
1177 openrouterCost = &newCost
1804 openrouterCost = &newCost
1178 }
1805 }
1806+ extractHyperCredits(step.ProviderMetadata)
1179 }
1807 }
1180
1808
1181 modelConfig := model.CatwalkCfg
1809 modelConfig := model.CatwalkCfg
@@ -1204,6 +1832,7 @@ func (a *sessionAgent) generateTitle(ctx context.Context, sessionID string, user
1204 slog.Error("Failed to save session title and usage", "error", saveErr)
1832 slog.Error("Failed to save session title and usage", "error", saveErr)
1205 return
1833 return
1206 }
1834 }
1835+ titleSaved = true
1207}
1836}
1208
1837
1209func (a *sessionAgent) openrouterCost(metadata fantasy.ProviderMetadata) *float64 {
1838func (a *sessionAgent) openrouterCost(metadata fantasy.ProviderMetadata) *float64 {
@@ -1219,6 +1848,25 @@ func (a *sessionAgent) openrouterCost(metadata fantasy.ProviderMetadata) *float6
1219 return &opts.Usage.Cost
1848 return &opts.Usage.Cost
1220}
1849}
1221
1850
1851+// extractHyperCredits reads usage.remaining.hypercredits from OpenAI
1852+// provider metadata and stores it for the next FetchCredits call.
1853+func extractHyperCredits(metadata fantasy.ProviderMetadata) {
1854+ openaiMeta, ok := metadata[openai.Name]
1855+ if !ok {
1856+ return
1857+ }
1858+ pm, ok := openaiMeta.(*openai.ProviderMetadata)
1859+ if !ok {
1860+ return
1861+ }
1862+ var remaining struct {
1863+ Hypercredits float64 `json:"hypercredits"`
1864+ }
1865+ if pm.ExtraField("remaining", &remaining) && remaining.Hypercredits > 0 {
1866+ hyper.SetBalance(int(math.Round(remaining.Hypercredits)))
1867+ }
1868+}
1869+
1222func (a *sessionAgent) updateSessionUsage(model Model, session *session.Session, usage fantasy.Usage, overrideCost *float64, estimated bool) {
1870func (a *sessionAgent) updateSessionUsage(model Model, session *session.Session, usage fantasy.Usage, overrideCost *float64, estimated bool) {
1223 if !usageIsZero(usage) {
1871 if !usageIsZero(usage) {
1224 session.EstimatedUsage = estimated
1872 session.EstimatedUsage = estimated
@@ -1269,6 +1917,16 @@ func summaryCompletionTokens(usage fantasy.Usage, summaryMessage message.Message
1269}
1917}
1270
1918
1271func (a *sessionAgent) Cancel(sessionID string) {
1919func (a *sessionAgent) Cancel(sessionID string) {
1920+ // Serialize against the dispatch handoff in Run so the accepted ->
1921+ // (cancel-on-entry | queued | active) transition is atomic against
1922+ // this cancel. Every cancel observes at least one of: an active
1923+ // request, an accepted run (recorded as a pending cancel), or a
1924+ // queue entry it then clears. If none of those hold, an idle Escape
1925+ // is a true no-op and must not poison the next prompt.
1926+ mu := a.sessionMu(sessionID)
1927+ mu.Lock()
1928+ defer mu.Unlock()
1929+
1272 // Cancel regular requests. Don't use Take() here - we need the entry to
1930 // Cancel regular requests. Don't use Take() here - we need the entry to
1273 // remain in activeRequests so IsBusy() returns true until the goroutine
1931 // remain in activeRequests so IsBusy() returns true until the goroutine
1274 // fully completes (including error handling that may access the DB).
1932 // fully completes (including error handling that may access the DB).
@@ -1284,16 +1942,40 @@ func (a *sessionAgent) Cancel(sessionID string) {
1284 cancel()
1942 cancel()
1285 }
1943 }
1286
1944
1945+ // Record a pending cancel only when a dispatched-but-not-yet-active
1946+ // run exists. This catches runs still in the goroutine scheduler or
1947+ // about to enter Run's busy-queue branch, while leaving an idle
1948+ // session untouched. Active and accepted are not mutually exclusive:
1949+ // when a run is active and a follow-up has been accepted, both the
1950+ // cancel above and this pending record fire.
1951+ //
1952+ // Raise the session's cancel mark to the latest accept sequence
1953+ // assigned so far. Every prompt currently accepted-but-not-yet-
1954+ // active has a sequence at or below that value, so one cancel covers
1955+ // all of them; a prompt accepted after this cancel gets a strictly
1956+ // higher sequence and is never poisoned. Using max keeps repeated
1957+ // cancels idempotent while the same prompts are in flight and lets a
1958+ // later cancel extend coverage to prompts accepted since.
1959+ a.acceptedMu.Lock()
1960+ count, ok := a.acceptedRuns.Get(sessionID)
1961+ mark := a.acceptSeqGen
1962+ a.acceptedMu.Unlock()
1963+ if ok && count > 0 {
1964+ slog.Debug("Recording cancel mark for accepted runs", "session_id", sessionID, "count", count, "mark", mark)
1965+ existing, _ := a.cancelMark.Get(sessionID)
1966+ a.cancelMark.Set(sessionID, max(existing, mark))
1967+ }
1968+
1287 if a.QueuedPrompts(sessionID) > 0 {
1969 if a.QueuedPrompts(sessionID) > 0 {
1288 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1970 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1289− a.messageQueue.Del(sessionID)
1971+ a.clearQueueAndNotify(sessionID)
1290 }
1972 }
1291}
1973}
1292
1974
1293func (a *sessionAgent) ClearQueue(sessionID string) {
1975func (a *sessionAgent) ClearQueue(sessionID string) {
1294 if a.QueuedPrompts(sessionID) > 0 {
1976 if a.QueuedPrompts(sessionID) > 0 {
1295 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1977 slog.Debug("Clearing queued prompts", "session_id", sessionID)
1296− a.messageQueue.Del(sessionID)
1978+ a.clearQueueAndNotify(sessionID)
1297 }
1979 }
1298}
1980}
1299
1981
@@ -1317,14 +1999,10 @@ func (a *sessionAgent) CancelAll() {
1317}
1999}
1318
2000
1319func (a *sessionAgent) IsBusy() bool {
2001func (a *sessionAgent) IsBusy() bool {
1320− var busy bool
2002+ // activeRequests only ever holds non-nil cancel funcs (Set with a
1321− for cancelFunc := range a.activeRequests.Seq() {
2003+ // real func, removed via Del), so a length check is exact — and it
1322− if cancelFunc != nil {
2004+ // avoids cloning the whole map, which Seq() does on every call.
1323− busy = true
2005+ return a.activeRequests.Len() > 0
1324− break
1325− }
1326− }
1327− return busy
1328}
2006}
1329
2007
1330func (a *sessionAgent) IsSessionBusy(sessionID string) bool {
2008func (a *sessionAgent) IsSessionBusy(sessionID string) bool {
@@ -1359,6 +2037,7 @@ func (a *sessionAgent) SetModels(large Model, small Model) {
1359
2037
1360func (a *sessionAgent) SetTools(tools []fantasy.AgentTool) {
2038func (a *sessionAgent) SetTools(tools []fantasy.AgentTool) {
1361 a.tools.SetSlice(tools)
2039 a.tools.SetSlice(tools)
2040+ a.toolsGen.Add(1)
1362}
2041}
1363
2042
1364func (a *sessionAgent) SetSystemPrompt(systemPrompt string) {
2043func (a *sessionAgent) SetSystemPrompt(systemPrompt string) {
@@ -1442,6 +2121,8 @@ func (a *sessionAgent) workaroundProviderMediaLimitations(messages []fantasy.Mes
1442 return messages
2121 return messages
1443 }
2122 }
1444
2123
2124+ supportsImages := largeModel.CatwalkCfg.SupportsImages
2125+
1445 convertedMessages := make([]fantasy.Message, 0, len(messages))
2126 convertedMessages := make([]fantasy.Message, 0, len(messages))
1446
2127
1447 for _, msg := range messages {
2128 for _, msg := range messages {
@@ -1461,6 +2142,21 @@ func (a *sessionAgent) workaroundProviderMediaLimitations(messages []fantasy.Mes
1461 }
2142 }
1462
2143
1463 if media, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](toolResult.Output); ok {
2144 if media, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](toolResult.Output); ok {
2145+ if !supportsImages {
2146+ // Model cannot process images. Replace with a text
2147+ // placeholder and skip creating a synthetic user
2148+ // message with FilePart, which would brick the
2149+ // session on text-only models.
2150+ textParts = append(textParts, fantasy.ToolResultPart{
2151+ ToolCallID: toolResult.ToolCallID,
2152+ Output: fantasy.ToolResultOutputContentText{
2153+ Text: "[Image/media content not supported by this model]",
2154+ },
2155+ ProviderOptions: toolResult.ProviderOptions,
2156+ })
2157+ continue
2158+ }
2159+
1464 decoded, err := base64.StdEncoding.DecodeString(media.Data)
2160 decoded, err := base64.StdEncoding.DecodeString(media.Data)
1465 if err != nil {
2161 if err != nil {
1466 slog.Warn("Failed to decode media data", "error", err)
2162 slog.Warn("Failed to decode media data", "error", err)
@@ -1533,3 +2229,20 @@ func providerRetryLogFields(err *fantasy.ProviderError, delay time.Duration) []a
1533 }
2229 }
1534 return fields
2230 return fields
1535}
2231}
2232+
2233+// sanitizeToolInput validates tool call JSON from the provider.
2234+// Malformed input is replaced with an empty object to prevent
2235+// stuck conversations from truncated or malformed model output.
2236+// The second return value indicates whether sanitization occurred.
2237+func sanitizeToolInput(toolName, toolCallID, input string) (string, bool) {
2238+ if !json.Valid([]byte(input)) {
2239+ slog.Warn(
2240+ "Malformed tool call JSON from provider, replacing with empty object",
2241+ "tool", toolName,
2242+ "id", toolCallID,
2243+ "input_len", len(input),
2244+ )
2245+ return "{}", true
2246+ }
2247+ return input, false
2248+}
internal/agent/agent_test.go+143
@@ -1,6 +1,7 @@
1package agent
1package agent
2
2
3import (
3import (
4+ "encoding/base64"
4 "fmt"
5 "fmt"
5 "log/slog"
6 "log/slog"
6 "os"
7 "os"
@@ -10,9 +11,11 @@ import (
10 "testing"
11 "testing"
11 "time"
12 "time"
12
13
14+ "charm.land/catwalk/pkg/catwalk"
13 "charm.land/fantasy"
15 "charm.land/fantasy"
14 "charm.land/x/vcr"
16 "charm.land/x/vcr"
15 "github.com/charmbracelet/crush/internal/agent/tools"
17 "github.com/charmbracelet/crush/internal/agent/tools"
18+ "github.com/charmbracelet/crush/internal/config"
16 "github.com/charmbracelet/crush/internal/message"
19 "github.com/charmbracelet/crush/internal/message"
17 "github.com/charmbracelet/crush/internal/session"
20 "github.com/charmbracelet/crush/internal/session"
18 "github.com/stretchr/testify/assert"
21 "github.com/stretchr/testify/assert"
@@ -840,6 +843,146 @@ func TestPreparePrompt_OrphanedToolUseMixed(t *testing.T) {
840 require.Equal(t, 1, syntheticCount, "expected exactly one synthetic result for the orphaned call")
843 require.Equal(t, 1, syntheticCount, "expected exactly one synthetic result for the orphaned call")
841}
844}
842
845
846+func TestWorkaroundProviderMediaLimitations_TextOnlyModel(t *testing.T) {
847+ env := testEnv(t)
848+ sa := testSessionAgent(env, nil, nil, "test prompt")
849+ agent := sa.(*sessionAgent)
850+
851+ pngBase64 := base64.StdEncoding.EncodeToString([]byte("fake-png-data"))
852+
853+ messages := []fantasy.Message{
854+ {
855+ Role: fantasy.MessageRoleTool,
856+ Content: []fantasy.MessagePart{
857+ fantasy.ToolResultPart{
858+ ToolCallID: "call_1",
859+ Output: fantasy.ToolResultOutputContentMedia{
860+ Data: pngBase64,
861+ MediaType: "image/png",
862+ },
863+ },
864+ },
865+ },
866+ }
867+
868+ // Non-Anthropic provider, no image support — should replace media with
869+ // a text placeholder and not create a synthetic user message.
870+ largeModel := Model{
871+ ModelCfg: config.SelectedModel{Provider: "openai"},
872+ CatwalkCfg: catwalk.Model{
873+ SupportsImages: false,
874+ },
875+ }
876+
877+ result := agent.workaroundProviderMediaLimitations(messages, largeModel)
878+
879+ // Should produce exactly one message: the tool message with a text
880+ // placeholder. No synthetic user message with FilePart.
881+ require.Len(t, result, 1)
882+ require.Equal(t, fantasy.MessageRoleTool, result[0].Role)
883+
884+ tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](result[0].Content[0])
885+ require.True(t, ok)
886+ _, ok = fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentText](tr.Output)
887+ require.True(t, ok)
888+}
889+
890+func TestWorkaroundProviderMediaLimitations_VisionModel(t *testing.T) {
891+ env := testEnv(t)
892+ sa := testSessionAgent(env, nil, nil, "test prompt")
893+ agent := sa.(*sessionAgent)
894+
895+ pngBase64 := base64.StdEncoding.EncodeToString([]byte("fake-png-data"))
896+
897+ messages := []fantasy.Message{
898+ {
899+ Role: fantasy.MessageRoleTool,
900+ Content: []fantasy.MessagePart{
901+ fantasy.ToolResultPart{
902+ ToolCallID: "call_1",
903+ Output: fantasy.ToolResultOutputContentMedia{
904+ Data: pngBase64,
905+ MediaType: "image/png",
906+ },
907+ },
908+ },
909+ },
910+ }
911+
912+ // Non-Anthropic provider, image support — should create a synthetic
913+ // user message with FilePart.
914+ largeModel := Model{
915+ ModelCfg: config.SelectedModel{Provider: "openai"},
916+ CatwalkCfg: catwalk.Model{
917+ SupportsImages: true,
918+ },
919+ }
920+
921+ result := agent.workaroundProviderMediaLimitations(messages, largeModel)
922+
923+ // Should produce two messages: tool message with placeholder text,
924+ // and synthetic user message with FilePart.
925+ require.Len(t, result, 2)
926+ require.Equal(t, fantasy.MessageRoleTool, result[0].Role)
927+ require.Equal(t, fantasy.MessageRoleUser, result[1].Role)
928+
929+ // The tool message should have text placeholder.
930+ tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](result[0].Content[0])
931+ require.True(t, ok)
932+ textOutput, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentText](tr.Output)
933+ require.True(t, ok)
934+ require.Contains(t, textOutput.Text, "see attached file")
935+
936+ // The synthetic user message should contain a TextPart and a FilePart.
937+ require.Len(t, result[1].Content, 2)
938+ file, ok := fantasy.AsMessagePart[fantasy.FilePart](result[1].Content[1])
939+ require.True(t, ok)
940+ require.Equal(t, "image/png", file.MediaType)
941+}
942+
943+func TestWorkaroundProviderMediaLimitations_AnthropicProvider(t *testing.T) {
944+ env := testEnv(t)
945+ sa := testSessionAgent(env, nil, nil, "test prompt")
946+ agent := sa.(*sessionAgent)
947+
948+ pngBase64 := base64.StdEncoding.EncodeToString([]byte("fake-png-data"))
949+
950+ messages := []fantasy.Message{
951+ {
952+ Role: fantasy.MessageRoleTool,
953+ Content: []fantasy.MessagePart{
954+ fantasy.ToolResultPart{
955+ ToolCallID: "call_1",
956+ Output: fantasy.ToolResultOutputContentMedia{
957+ Data: pngBase64,
958+ MediaType: "image/png",
959+ },
960+ },
961+ },
962+ },
963+ }
964+
965+ // Anthropic provider — should return messages unchanged regardless of
966+ // SupportsImages, since Anthropic handles media in tool results natively.
967+ largeModel := Model{
968+ ModelCfg: config.SelectedModel{Provider: string(catwalk.InferenceProviderAnthropic)},
969+ CatwalkCfg: catwalk.Model{
970+ SupportsImages: true,
971+ },
972+ }
973+
974+ result := agent.workaroundProviderMediaLimitations(messages, largeModel)
975+ require.Len(t, result, 1)
976+ require.Equal(t, fantasy.MessageRoleTool, result[0].Role)
977+
978+ // The media should still be in the tool result, untouched.
979+ tr, ok := fantasy.AsMessagePart[fantasy.ToolResultPart](result[0].Content[0])
980+ require.True(t, ok)
981+ media, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](tr.Output)
982+ require.True(t, ok)
983+ require.Equal(t, "image/png", media.MediaType)
984+}
985+
843func TestProviderRetryLogFields(t *testing.T) {
986func TestProviderRetryLogFields(t *testing.T) {
844 t.Run("nil provider error", func(t *testing.T) {
987 t.Run("nil provider error", func(t *testing.T) {
845 fields := providerRetryLogFields(nil, 2*time.Second)
988 fields := providerRetryLogFields(nil, 2*time.Second)
internal/agent/agentic_fetch_tool.go+1−1
@@ -167,7 +167,7 @@ func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (
167 fetchTools := []fantasy.AgentTool{
167 fetchTools := []fantasy.AgentTool{
168 webFetchTool,
168 webFetchTool,
169 webSearchTool,
169 webSearchTool,
170− tools.NewGlobTool(tmpDir),
170+ tools.NewGlobTool(tmpDir, c.cfg.Config().Tools.Glob),
171 tools.NewGrepTool(tmpDir, c.cfg.Config().Tools.Grep),
171 tools.NewGrepTool(tmpDir, c.cfg.Config().Tools.Grep),
172 tools.NewSourcegraphTool(client),
172 tools.NewSourcegraphTool(client),
173 tools.NewViewTool(c.lspManager, c.permissions, c.filetracker, nil, tmpDir),
173 tools.NewViewTool(c.lspManager, c.permissions, c.filetracker, nil, tmpDir),
internal/agent/agenttest/coordinator.gonew file+80
@@ -0,0 +1,80 @@
1+// Package agenttest provides test-only constructors for wiring a real
2+// production agent.Coordinator without booting a full app.App. It is
3+// imported only from _test.go files (e.g. internal/backend integration
4+// tests) and is never referenced by production code, so it is compiled
5+// only under tests and never ships in the production binary or API.
6+package agenttest
7+
8+import (
9+ "context"
10+
11+ "charm.land/catwalk/pkg/catwalk"
12+ "charm.land/fantasy/providers/openaicompat"
13+ "github.com/charmbracelet/crush/internal/agent"
14+ "github.com/charmbracelet/crush/internal/config"
15+ "github.com/charmbracelet/crush/internal/message"
16+ "github.com/charmbracelet/crush/internal/permission"
17+ "github.com/charmbracelet/crush/internal/session"
18+)
19+
20+// NewCoordinator builds a real agent.Coordinator through the production
21+// agent.NewCoordinator constructor so the RunAccepted / BeginAccepted /
22+// run path (including UpdateModels) is the actual code under test.
23+//
24+// It installs a minimal config with a single openai-compatible provider
25+// whose model resolves offline. run rebuilds the model on every call, so
26+// the provider must construct without network I/O; the cancel-on-entry
27+// path this helper is built to exercise returns before any model call,
28+// so no request is ever issued. The coder agent's allowed-tools list is
29+// cleared to keep tool construction cheap and free of sub-agent wiring.
30+//
31+// The optional coordinator dependencies (history, filetracker, LSP,
32+// notify, runComplete, skills) are nil: run guards the publisher fields
33+// and the cancel-on-entry path never touches the others.
34+func NewCoordinator(
35+ ctx context.Context,
36+ workingDir string,
37+ sessions session.Service,
38+ messages message.Service,
39+) (agent.Coordinator, error) {
40+ cfg, err := config.Init(workingDir, "", false)
41+ if err != nil {
42+ return nil, err
43+ }
44+
45+ const (
46+ providerID = "test-openai-compat"
47+ modelID = "test-model"
48+ )
49+ cfg.Config().Providers.Set(providerID, config.ProviderConfig{
50+ ID: providerID,
51+ Name: "Test",
52+ Type: openaicompat.Name,
53+ BaseURL: "http://127.0.0.1:0/v1",
54+ APIKey: "test",
55+ Models: []catwalk.Model{{ID: modelID, DefaultMaxTokens: 4096}},
56+ })
57+ selected := config.SelectedModel{Provider: providerID, Model: modelID}
58+ cfg.OverridePreferredModel(config.SelectedModelTypeLarge, selected)
59+ cfg.OverridePreferredModel(config.SelectedModelTypeSmall, selected)
60+ cfg.SetupAgents()
61+
62+ // Keep buildTools light: no sub-agent or agentic-fetch construction.
63+ coderCfg := cfg.Config().Agents[config.AgentCoder]
64+ coderCfg.AllowedTools = nil
65+ cfg.Config().Agents[config.AgentCoder] = coderCfg
66+
67+ return agent.NewCoordinator(
68+ ctx,
69+ cfg,
70+ sessions,
71+ messages,
72+ permission.NewPermissionService(workingDir, true, nil),
73+ nil,
74+ nil,
75+ nil,
76+ nil,
77+ nil,
78+ nil,
79+ )
80+}
internal/agent/common_test.go+2−1
@@ -152,6 +152,7 @@ func coderAgent(r *vcr.Recorder, env fakeEnv, large, small fantasy.LanguageModel
152 cfg.Config().Options.SkillsPaths = nil
152 cfg.Config().Options.SkillsPaths = nil
153 cfg.Config().Options.DisabledSkills = []string{"crush-config"}
153 cfg.Config().Options.DisabledSkills = []string{"crush-config"}
154 cfg.Config().Options.ContextPaths = nil
154 cfg.Config().Options.ContextPaths = nil
155+ cfg.Config().Options.GlobalContextPaths = nil
155 cfg.Config().LSP = nil
156 cfg.Config().LSP = nil
156
157
157 systemPrompt, err := prompt.Build(context.TODO(), large.Provider(), large.Model(), cfg)
158 systemPrompt, err := prompt.Build(context.TODO(), large.Provider(), large.Model(), cfg)
@@ -171,7 +172,7 @@ func coderAgent(r *vcr.Recorder, env fakeEnv, large, small fantasy.LanguageModel
171 tools.NewEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
172 tools.NewEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
172 tools.NewMultiEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
173 tools.NewMultiEditTool(nil, env.permissions, env.history, *env.filetracker, env.workingDir),
173 tools.NewFetchTool(env.permissions, env.workingDir, r.GetDefaultClient()),
174 tools.NewFetchTool(env.permissions, env.workingDir, r.GetDefaultClient()),
174− tools.NewGlobTool(env.workingDir),
175+ tools.NewGlobTool(env.workingDir, cfg.Config().Tools.Glob),
175 tools.NewGrepTool(env.workingDir, cfg.Config().Tools.Grep),
176 tools.NewGrepTool(env.workingDir, cfg.Config().Tools.Grep),
176 tools.NewLsTool(env.permissions, env.workingDir, cfg.Config().Tools.Ls),
177 tools.NewLsTool(env.permissions, env.workingDir, cfg.Config().Tools.Ls),
177 tools.NewSourcegraphTool(r.GetDefaultClient()),
178 tools.NewSourcegraphTool(r.GetDefaultClient()),
internal/agent/coordinator.go+306−24
@@ -15,6 +15,8 @@ import (
15 "path/filepath"
15 "path/filepath"
16 "slices"
16 "slices"
17 "strings"
17 "strings"
18+ "sync"
19+ "sync/atomic"
18
20
19 "charm.land/catwalk/pkg/catwalk"
21 "charm.land/catwalk/pkg/catwalk"
20 "charm.land/fantasy"
22 "charm.land/fantasy"
@@ -22,7 +24,10 @@ import (
22 "github.com/charmbracelet/crush/internal/agent/notify"
24 "github.com/charmbracelet/crush/internal/agent/notify"
23 "github.com/charmbracelet/crush/internal/agent/prompt"
25 "github.com/charmbracelet/crush/internal/agent/prompt"
24 "github.com/charmbracelet/crush/internal/agent/tools"
26 "github.com/charmbracelet/crush/internal/agent/tools"
27+ "github.com/charmbracelet/crush/internal/agent/tools/mcp"
25 "github.com/charmbracelet/crush/internal/config"
28 "github.com/charmbracelet/crush/internal/config"
29+ "github.com/charmbracelet/crush/internal/csync"
30+ "github.com/charmbracelet/crush/internal/discover"
26 "github.com/charmbracelet/crush/internal/event"
31 "github.com/charmbracelet/crush/internal/event"
27 "github.com/charmbracelet/crush/internal/filetracker"
32 "github.com/charmbracelet/crush/internal/filetracker"
28 "github.com/charmbracelet/crush/internal/history"
33 "github.com/charmbracelet/crush/internal/history"
@@ -81,6 +86,15 @@ type Coordinator interface {
81 // INFO: (kujtim) this is not used yet we will use this when we have multiple agents
86 // INFO: (kujtim) this is not used yet we will use this when we have multiple agents
82 // SetMainAgent(string)
87 // SetMainAgent(string)
83 Run(ctx context.Context, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error)
88 Run(ctx context.Context, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error)
89+ // RunAccepted runs a call that was already accepted via
90+ // BeginAccepted on the fire-and-forget dispatch path. The handle is
91+ // the only carrier of accept-state across the backend.runAgent /
92+ // Coordinator / sessionAgent.Run layers: it reaches
93+ // sessionAgent.Run as SessionAgentCall.Accepted, where it is
94+ // consumed under dispatchMu once the accepted -> (cancel-on-entry |
95+ // queued | active) transition is chosen.
96+ RunAccepted(ctx context.Context, accept *AcceptedRun, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error)
97+ BeginAccepted(sessionID string) *AcceptedRun
84 Cancel(sessionID string)
98 Cancel(sessionID string)
85 CancelAll()
99 CancelAll()
86 IsSessionBusy(sessionID string) bool
100 IsSessionBusy(sessionID string) bool
@@ -91,6 +105,7 @@ type Coordinator interface {
91 Summarize(context.Context, string) error
105 Summarize(context.Context, string) error
92 Model() Model
106 Model() Model
93 UpdateModels(ctx context.Context) error
107 UpdateModels(ctx context.Context) error
108+ GenerateTitle(ctx context.Context, sessionID, prompt string)
94}
109}
95
110
96type coordinator struct {
111type coordinator struct {
@@ -112,6 +127,32 @@ type coordinator struct {
112 activeSkills []*skills.Skill // Post-filter: active skills only.
127 activeSkills []*skills.Skill // Post-filter: active skills only.
113 skillTracker *skills.Tracker
128 skillTracker *skills.Tracker
114
129
130+ // providerClients caches built provider clients keyed by their fully
131+ // resolved configuration. UpdateModels rebuilds models every turn;
132+ // without this, each turn discards the provider's HTTP client and its
133+ // keep-alive connection pool, forcing a fresh TLS handshake. The key
134+ // captures every input buildProvider depends on, so any config/model/
135+ // credential change misses the cache and rebuilds.
136+ providerClients *csync.Map[string, fantasy.Provider]
137+
138+ // toolsCache avoids rebuilding the tool set on every UpdateModels call.
139+ // The cache is invalidated when the config pointer changes (reload or
140+ // mutation) or when mcpToolsGen is bumped (MCP server connect/disconnect
141+ // or tools/list_changed notification).
142+ toolsCacheMu sync.Mutex
143+ toolsCache []fantasy.AgentTool
144+ toolsCacheCfg *config.Config
145+ toolsCacheMCP uint64
146+ mcpToolsGen atomic.Uint64
147+
148+ // providerOptsCache avoids repeating the 3× JSON marshal + merge +
149+ // unmarshal in getProviderOptions on every turn when the model and
150+ // config have not changed. Keyed by config pointer + model CatwalkCfg
151+ // ID + provider name.
152+ providerOptsCacheMu sync.Mutex
153+ providerOptsCache fantasy.ProviderOptions
154+ providerOptsCacheKey string
155+
115 readyWg errgroup.Group
156 readyWg errgroup.Group
116}
157}
117
158
@@ -155,6 +196,8 @@ func NewCoordinator(
155 allSkills: allSkills,
196 allSkills: allSkills,
156 activeSkills: activeSkills,
197 activeSkills: activeSkills,
157 skillTracker: skillTracker,
198 skillTracker: skillTracker,
199+
200+ providerClients: csync.NewMap[string, fantasy.Provider](),
158 }
201 }
159
202
160 agentCfg, ok := cfg.Config().Agents[config.AgentCoder]
203 agentCfg, ok := cfg.Config().Agents[config.AgentCoder]
@@ -174,11 +217,36 @@ func NewCoordinator(
174 }
217 }
175 c.currentAgent = agent
218 c.currentAgent = agent
176 c.agents[config.AgentCoder] = agent
219 c.agents[config.AgentCoder] = agent
220+
221+ // Subscribe to MCP tool-list changes so the tools cache is invalidated
222+ // when MCP servers connect/disconnect or announce new tools.
223+ go func() {
224+ for ev := range mcp.SubscribeEvents(ctx) {
225+ if ev.Payload.Type == mcp.EventToolsListChanged || ev.Payload.Type == mcp.EventStateChanged {
226+ c.mcpToolsGen.Add(1)
227+ }
228+ }
229+ }()
230+
177 return c, nil
231 return c, nil
178}
232}
179
233
180// Run implements Coordinator.
234// Run implements Coordinator.
181func (c *coordinator) Run(ctx context.Context, sessionID string, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
235func (c *coordinator) Run(ctx context.Context, sessionID string, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
236+ return c.run(ctx, nil, sessionID, prompt, attachments...)
237+}
238+
239+// RunAccepted implements Coordinator.
240+func (c *coordinator) RunAccepted(ctx context.Context, accept *AcceptedRun, sessionID string, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
241+ return c.run(ctx, accept, sessionID, prompt, attachments...)
242+}
243+
244+// run is the shared implementation behind Run and RunAccepted. When
245+// accept is non-nil it is threaded onto the SessionAgentCall as
246+// Accepted so sessionAgent.Run can consume the accept reservation under
247+// dispatchMu; when nil (the in-process/local path) no accept tracking
248+// applies.
249+func (c *coordinator) run(ctx context.Context, accept *AcceptedRun, sessionID string, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
182 if err := c.readyWg.Wait(); err != nil {
250 if err := c.readyWg.Wait(); err != nil {
183 return nil, err
251 return nil, err
184 }
252 }
@@ -210,7 +278,7 @@ func (c *coordinator) Run(ctx context.Context, sessionID string, prompt string,
210 return nil, errModelProviderNotConfigured
278 return nil, errModelProviderNotConfigured
211 }
279 }
212
280
213− mergedOptions, temp, topP, topK, freqPenalty, presPenalty := mergeCallOptions(model, providerCfg)
281+ mergedOptions, temp, topP, topK, freqPenalty, presPenalty := c.cachedMergeCallOptions(model, providerCfg)
214
282
215 if err := c.refreshTokenIfExpired(ctx, providerCfg); err != nil {
283 if err := c.refreshTokenIfExpired(ctx, providerCfg); err != nil {
216 // NOTE(@andreynering): We don't return here because the event handling to ask the user to reauthenticate
284 // NOTE(@andreynering): We don't return here because the event handling to ask the user to reauthenticate
@@ -256,6 +324,7 @@ func (c *coordinator) Run(ctx context.Context, sessionID string, prompt string,
256 FrequencyPenalty: freqPenalty,
324 FrequencyPenalty: freqPenalty,
257 PresencePenalty: presPenalty,
325 PresencePenalty: presPenalty,
258 OnComplete: onComplete,
326 OnComplete: onComplete,
327+ Accepted: accept,
259 })
328 })
260 }
329 }
261 beforeLoaded := c.skillTracker.LoadedNames()
330 beforeLoaded := c.skillTracker.LoadedNames()
@@ -278,10 +347,35 @@ func (c *coordinator) Run(ctx context.Context, sessionID string, prompt string,
278
347
279 if hasLatest && c.runComplete != nil {
348 if hasLatest && c.runComplete != nil {
280 c.runComplete.PublishMustDeliver(ctx, pubsub.UpdatedEvent, latest)
349 c.runComplete.PublishMustDeliver(ctx, pubsub.UpdatedEvent, latest)
350+ // Signal to the dispatcher (backend.runAgent) that the
351+ // authoritative terminal RunComplete for this run was already
352+ // emitted, so it does not publish a duplicate fallback for the
353+ // error it is about to receive.
354+ MarkRunCompletePublished(ctx)
281 }
355 }
282 return result, originalErr
356 return result, originalErr
283}
357}
284
358
359+// effectiveReasoningEffort returns the reasoning effort to apply for provider calls.
360+// It prefers the user-selected effort when valid, otherwise the model default when
361+// valid, and finally falls back to the first configured reasoning level.
362+func effectiveReasoningEffort(model Model) string {
363+ if !model.CatwalkCfg.CanReason {
364+ return ""
365+ }
366+
367+ if effort := model.ModelCfg.ReasoningEffort; effort != "" && slices.Contains(model.CatwalkCfg.ReasoningLevels, effort) {
368+ return effort
369+ }
370+ if effort := model.CatwalkCfg.DefaultReasoningEffort; effort != "" && slices.Contains(model.CatwalkCfg.ReasoningLevels, effort) {
371+ return effort
372+ }
373+ if len(model.CatwalkCfg.ReasoningLevels) > 0 {
374+ return model.CatwalkCfg.ReasoningLevels[0]
375+ }
376+ return ""
377+}
378+
285func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.ProviderOptions {
379func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.ProviderOptions {
286 options := fantasy.ProviderOptions{}
380 options := fantasy.ProviderOptions{}
287
381
@@ -330,14 +424,16 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
330 return options
424 return options
331 }
425 }
332
426
427+ reasoningEffort := effectiveReasoningEffort(model)
333 shouldSetEffort := model.CatwalkCfg.CanReason &&
428 shouldSetEffort := model.CatwalkCfg.CanReason &&
429+ reasoningEffort != "" &&
334− slices.Contains(model.CatwalkCfg.ReasoningLevels, model.ModelCfg.ReasoningEffort)
430+ slices.Contains(model.CatwalkCfg.ReasoningLevels, reasoningEffort)
335
431
336 switch providerCfg.Type {
432 switch providerCfg.Type {
337 case openai.Name, azure.Name:
433 case openai.Name, azure.Name:
338 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
434 _, hasReasoningEffort := mergedOptions["reasoning_effort"]
339 if !hasReasoningEffort && shouldSetEffort {
435 if !hasReasoningEffort && shouldSetEffort {
340− mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort
436+ mergedOptions["reasoning_effort"] = reasoningEffort
341 }
437 }
342 if openai.IsResponsesModel(model.CatwalkCfg.ID) {
438 if openai.IsResponsesModel(model.CatwalkCfg.ID) {
343 if openai.IsResponsesReasoningModel(model.CatwalkCfg.ID) {
439 if openai.IsResponsesReasoningModel(model.CatwalkCfg.ID) {
@@ -354,6 +450,7 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
354 options[openai.Name] = parsed
450 options[openai.Name] = parsed
355 }
451 }
356 }
452 }
453+
357 case anthropic.Name, bedrock.Name:
454 case anthropic.Name, bedrock.Name:
358 var (
455 var (
359 _, hasEffort = mergedOptions["effort"]
456 _, hasEffort = mergedOptions["effort"]
@@ -362,10 +459,10 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
362 )
459 )
363
460
364 switch providerCfg.ID {
461 switch providerCfg.ID {
365− case string(catwalk.InferenceProviderAlibabaSingapore):
462+ case string(catwalk.InferenceProviderAlibabaSingapore), string(catwalk.InferenceProviderAlibabaUS):
366 switch {
463 switch {
367 case !hasEffort && shouldSetEffort:
464 case !hasEffort && shouldSetEffort:
368− extraBody["reasoning_effort"] = model.ModelCfg.ReasoningEffort
465+ extraBody["reasoning_effort"] = reasoningEffort
369 case !hasThink && model.CatwalkCfg.CanReason:
466 case !hasThink && model.CatwalkCfg.CanReason:
370 if model.ModelCfg.Think {
467 if model.ModelCfg.Think {
371 extraBody["thinking"] = map[string]any{"type": "enabled"}
468 extraBody["thinking"] = map[string]any{"type": "enabled"}
@@ -378,7 +475,7 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
378 default:
475 default:
379 switch {
476 switch {
380 case !hasEffort && shouldSetEffort:
477 case !hasEffort && shouldSetEffort:
381− mergedOptions["effort"] = model.ModelCfg.ReasoningEffort
478+ mergedOptions["effort"] = reasoningEffort
382 case !hasThink && model.ModelCfg.Think:
479 case !hasThink && model.ModelCfg.Think:
383 mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000}
480 mergedOptions["thinking"] = map[string]any{"budget_tokens": 2000}
384 }
481 }
@@ -394,25 +491,27 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
394 if !hasReasoning && shouldSetEffort {
491 if !hasReasoning && shouldSetEffort {
395 mergedOptions["reasoning"] = map[string]any{
492 mergedOptions["reasoning"] = map[string]any{
396 "enabled": true,
493 "enabled": true,
397− "effort": model.ModelCfg.ReasoningEffort,
494+ "effort": reasoningEffort,
398 }
495 }
399 }
496 }
400 parsed, err := openrouter.ParseOptions(mergedOptions)
497 parsed, err := openrouter.ParseOptions(mergedOptions)
401 if err == nil {
498 if err == nil {
402 options[openrouter.Name] = parsed
499 options[openrouter.Name] = parsed
403 }
500 }
501+
404 case vercel.Name:
502 case vercel.Name:
405 _, hasReasoning := mergedOptions["reasoning"]
503 _, hasReasoning := mergedOptions["reasoning"]
406 if !hasReasoning && shouldSetEffort {
504 if !hasReasoning && shouldSetEffort {
407 mergedOptions["reasoning"] = map[string]any{
505 mergedOptions["reasoning"] = map[string]any{
408 "enabled": true,
506 "enabled": true,
409− "effort": model.ModelCfg.ReasoningEffort,
507+ "effort": reasoningEffort,
410 }
508 }
411 }
509 }
412 parsed, err := vercel.ParseOptions(mergedOptions)
510 parsed, err := vercel.ParseOptions(mergedOptions)
413 if err == nil {
511 if err == nil {
414 options[vercel.Name] = parsed
512 options[vercel.Name] = parsed
415 }
513 }
514+
416 case google.Name:
515 case google.Name:
417 _, hasReasoning := mergedOptions["thinking_config"]
516 _, hasReasoning := mergedOptions["thinking_config"]
418 if !hasReasoning {
517 if !hasReasoning {
@@ -423,7 +522,7 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
423 }
522 }
424 } else {
523 } else {
425 mergedOptions["thinking_config"] = map[string]any{
524 mergedOptions["thinking_config"] = map[string]any{
426− "thinking_level": model.ModelCfg.ReasoningEffort,
525+ "thinking_level": reasoningEffort,
427 "include_thoughts": true,
526 "include_thoughts": true,
428 }
527 }
429 }
528 }
@@ -432,6 +531,7 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
432 if err == nil {
531 if err == nil {
433 options[google.Name] = parsed
532 options[google.Name] = parsed
434 }
533 }
534+
435 case openaicompat.Name, hyper.Name:
535 case openaicompat.Name, hyper.Name:
436 extraBody := make(map[string]any)
536 extraBody := make(map[string]any)
437
537
@@ -439,9 +539,9 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
439 if !hasReasoningEffort && shouldSetEffort {
539 if !hasReasoningEffort && shouldSetEffort {
440 switch providerCfg.ID {
540 switch providerCfg.ID {
441 case string(catwalk.InferenceProviderIoNet):
541 case string(catwalk.InferenceProviderIoNet):
442− extraBody["reasoning"] = map[string]string{"effort": model.ModelCfg.ReasoningEffort}
542+ extraBody["reasoning"] = map[string]string{"effort": reasoningEffort}
443 default:
543 default:
444− mergedOptions["reasoning_effort"] = model.ModelCfg.ReasoningEffort
544+ mergedOptions["reasoning_effort"] = reasoningEffort
445 }
545 }
446 }
546 }
447
547
@@ -460,19 +560,32 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
460 extraBody["reasoning"] = map[string]string{"effort": "none"}
560 extraBody["reasoning"] = map[string]string{"effort": "none"}
461 }
561 }
462 }
562 }
563+
463 case string(catwalk.InferenceProviderZAI), string(catwalk.InferenceProviderDeepSeek):
564 case string(catwalk.InferenceProviderZAI), string(catwalk.InferenceProviderDeepSeek):
464− if model.ModelCfg.Think || model.ModelCfg.ReasoningEffort != "" {
565+ if model.ModelCfg.Think || reasoningEffort != "" {
465− extraBody["thinking"] = map[string]any{
566+ extraBody["thinking"] = map[string]any{"type": "enabled"}
466− "type": "enabled",
467− }
468 } else {
567 } else {
469− extraBody["thinking"] = map[string]any{
568+ extraBody["thinking"] = map[string]any{"type": "disabled"}
470− "type": "disabled",
569+ }
570+
571+ case string(catwalk.InferenceProviderFireworks):
572+ // NOTE: Fireworks break if we set both `reasoning_effort` and `thinking`.
573+ if reasoningEffort == "" {
574+ if model.ModelCfg.Think {
575+ extraBody["thinking"] = map[string]any{"type": "enabled"}
576+ } else {
577+ extraBody["thinking"] = map[string]any{"type": "disabled"}
471 }
578 }
472 }
579 }
580+
581+ case string(catwalk.InferenceProviderBaseten):
582+ extraBody["chat_template_args"] = map[string]any{
583+ "enable_thinking": model.ModelCfg.Think || reasoningEffort != "",
584+ }
585+
473− case string(catwalk.InferenceProviderAlibabaSingapore):
586+ case string(catwalk.InferenceProviderAlibabaSingapore), string(catwalk.InferenceProviderAlibabaUS):
474 if model.CatwalkCfg.CanReason {
587 if model.CatwalkCfg.CanReason {
475− extraBody["enable_thinking"] = model.ModelCfg.Think
588+ extraBody["enable_thinking"] = model.ModelCfg.Think || reasoningEffort != ""
476 }
589 }
477 }
590 }
478
591
@@ -482,6 +595,16 @@ func getProviderOptions(model Model, providerCfg config.ProviderConfig) fantasy.
482 if err == nil {
595 if err == nil {
483 options[openaicompat.Name] = parsed
596 options[openaicompat.Name] = parsed
484 }
597 }
598+
599+ default:
600+ // Known custom providers (litellm, ollama, omlx) are
601+ // openai-compat under the hood.
602+ if discover.IsKnownCustomProvider(string(providerCfg.Type)) {
603+ parsed, err := openaicompat.ParseOptions(mergedOptions)
604+ if err == nil {
605+ options[openaicompat.Name] = parsed
606+ }
607+ }
485 }
608 }
486
609
487 return options
610 return options
@@ -497,6 +620,39 @@ func mergeCallOptions(model Model, cfg config.ProviderConfig) (fantasy.ProviderO
497 return modelOptions, temp, topP, topK, freqPenalty, presPenalty
620 return modelOptions, temp, topP, topK, freqPenalty, presPenalty
498}
621}
499
622
623+// cachedMergeCallOptions wraps mergeCallOptions with a memoization cache.
624+// The provider options JSON merge is expensive (3× marshal + merge +
625+// unmarshal) and the inputs rarely change between turns. The cache key
626+// combines the config pointer identity with the model's catwalk ID and
627+// provider name so any config reload or model switch misses the cache.
628+func (c *coordinator) cachedMergeCallOptions(model Model, cfg config.ProviderConfig) (fantasy.ProviderOptions, *float64, *float64, *int64, *float64, *float64) {
629+ key := fmt.Sprintf("%p|%s|%s", c.cfg.Config(), model.CatwalkCfg.ID, model.ModelCfg.Provider)
630+
631+ c.providerOptsCacheMu.Lock()
632+ if c.providerOptsCacheKey == key {
633+ opts := c.providerOptsCache
634+ c.providerOptsCacheMu.Unlock()
635+ // Recompute the scalar overrides (cheap) since they don't need
636+ // the JSON merge — they're just cmp.Or calls.
637+ temp := cmp.Or(model.ModelCfg.Temperature, model.CatwalkCfg.Options.Temperature)
638+ topP := cmp.Or(model.ModelCfg.TopP, model.CatwalkCfg.Options.TopP)
639+ topK := cmp.Or(model.ModelCfg.TopK, model.CatwalkCfg.Options.TopK)
640+ freqPenalty := cmp.Or(model.ModelCfg.FrequencyPenalty, model.CatwalkCfg.Options.FrequencyPenalty)
641+ presPenalty := cmp.Or(model.ModelCfg.PresencePenalty, model.CatwalkCfg.Options.PresencePenalty)
642+ return opts, temp, topP, topK, freqPenalty, presPenalty
643+ }
644+ c.providerOptsCacheMu.Unlock()
645+
646+ opts, temp, topP, topK, freqPenalty, presPenalty := mergeCallOptions(model, cfg)
647+
648+ c.providerOptsCacheMu.Lock()
649+ c.providerOptsCache = opts
650+ c.providerOptsCacheKey = key
651+ c.providerOptsCacheMu.Unlock()
652+
653+ return opts, temp, topP, topK, freqPenalty, presPenalty
654+}
655+
500func (c *coordinator) buildAgent(ctx context.Context, prompt *prompt.Prompt, agent config.Agent, isSubAgent bool) (SessionAgent, error) {
656func (c *coordinator) buildAgent(ctx context.Context, prompt *prompt.Prompt, agent config.Agent, isSubAgent bool) (SessionAgent, error) {
501 large, small, err := c.buildAgentModels(ctx, isSubAgent)
657 large, small, err := c.buildAgentModels(ctx, isSubAgent)
502 if err != nil {
658 if err != nil {
@@ -585,7 +741,7 @@ func (c *coordinator) buildTools(ctx context.Context, agent config.Agent, isSubA
585 tools.NewEditTool(c.lspManager, c.permissions, c.history, c.filetracker, c.cfg.WorkingDir()),
741 tools.NewEditTool(c.lspManager, c.permissions, c.history, c.filetracker, c.cfg.WorkingDir()),
586 tools.NewMultiEditTool(c.lspManager, c.permissions, c.history, c.filetracker, c.cfg.WorkingDir()),
742 tools.NewMultiEditTool(c.lspManager, c.permissions, c.history, c.filetracker, c.cfg.WorkingDir()),
587 tools.NewFetchTool(c.permissions, c.cfg.WorkingDir(), nil),
743 tools.NewFetchTool(c.permissions, c.cfg.WorkingDir(), nil),
588− tools.NewGlobTool(c.cfg.WorkingDir()),
744+ tools.NewGlobTool(c.cfg.WorkingDir(), c.cfg.Config().Tools.Glob),
589 tools.NewGrepTool(c.cfg.WorkingDir(), c.cfg.Config().Tools.Grep),
745 tools.NewGrepTool(c.cfg.WorkingDir(), c.cfg.Config().Tools.Grep),
590 tools.NewLsTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Tools.Ls),
746 tools.NewLsTool(c.permissions, c.cfg.WorkingDir(), c.cfg.Config().Tools.Ls),
591 tools.NewSourcegraphTool(nil),
747 tools.NewSourcegraphTool(nil),
@@ -963,6 +1119,74 @@ func (c *coordinator) buildProvider(providerCfg config.ProviderConfig, model con
963 apiKey, _ := c.cfg.Resolve(providerCfg.APIKey)
1119 apiKey, _ := c.cfg.Resolve(providerCfg.APIKey)
964 baseURL, _ := c.cfg.Resolve(providerCfg.BaseURL)
1120 baseURL, _ := c.cfg.Resolve(providerCfg.BaseURL)
965
1121
1122+ // Reuse a previously built client when nothing that affects it has
1123+ // changed, so the HTTP keep-alive pool survives across turns. The key
1124+ // is derived from the resolved inputs above (plus the debug flag); the
1125+ // per-provider adjustments inside the switch below are deterministic
1126+ // functions of these, so identical inputs always yield an identical
1127+ // client.
1128+ cacheKey := c.providerCacheKey(providerCfg, model, apiKey, baseURL, headers, isSubAgent)
1129+ if p, ok := c.providerClients.Get(cacheKey); ok {
1130+ return p, nil
1131+ }
1132+ provider, err := c.buildProviderUncached(providerCfg, model, apiKey, baseURL, headers, isSubAgent)
1133+ if err != nil {
1134+ return nil, err
1135+ }
1136+ c.providerClients.Set(cacheKey, provider)
1137+ return provider, nil
1138+}
1139+
1140+// providerCacheKey builds a stable key from every input buildProvider's
1141+// switch consumes, so any credential, endpoint, header, or option change
1142+// produces a distinct key (and thus a rebuilt client).
1143+func (c *coordinator) providerCacheKey(providerCfg config.ProviderConfig, model config.SelectedModel, apiKey, baseURL string, headers map[string]string, isSubAgent bool) string {
1144+ var b strings.Builder
1145+ b.WriteString(providerCfg.ID)
1146+ b.WriteByte(0)
1147+ b.WriteString(string(providerCfg.Type))
1148+ b.WriteByte(0)
1149+ // The opencode providers pick their client type from the model, so the
1150+ // model must participate in the key.
1151+ b.WriteString(model.Model)
1152+ b.WriteByte(0)
1153+ b.WriteString(apiKey)
1154+ b.WriteByte(0)
1155+ // Bedrock falls back to AWS_BEARER_TOKEN_BEDROCK when no apiKey is
1156+ // configured, and that token is baked into the built client. Fold it
1157+ // into the key so a rotated token rebuilds the client instead of
1158+ // reusing a stale one.
1159+ if apiKey == "" && providerCfg.Type == bedrock.Name {
1160+ b.WriteString(os.Getenv("AWS_BEARER_TOKEN_BEDROCK"))
1161+ }
1162+ b.WriteByte(0)
1163+ b.WriteString(baseURL)
1164+ b.WriteByte(0)
1165+ for _, k := range slices.Sorted(maps.Keys(headers)) {
1166+ b.WriteString(k)
1167+ b.WriteByte('=')
1168+ b.WriteString(headers[k])
1169+ b.WriteByte(1)
1170+ }
1171+ b.WriteByte(0)
1172+ if extra, err := json.Marshal(providerCfg.ExtraBody); err == nil {
1173+ b.Write(extra)
1174+ }
1175+ b.WriteByte(0)
1176+ if extra, err := json.Marshal(providerCfg.ExtraParams); err == nil {
1177+ b.Write(extra)
1178+ }
1179+ b.WriteByte(0)
1180+ if isSubAgent {
1181+ b.WriteByte('s')
1182+ }
1183+ if c.cfg.Config().Options.Debug {
1184+ b.WriteByte('d')
1185+ }
1186+ return b.String()
1187+}
1188+
1189+func (c *coordinator) buildProviderUncached(providerCfg config.ProviderConfig, model config.SelectedModel, apiKey, baseURL string, headers map[string]string, isSubAgent bool) (fantasy.Provider, error) {
966 switch providerCfg.ID {
1190 switch providerCfg.ID {
967 case string(catwalk.InferenceProviderOpenCodeGo), string(catwalk.InferenceProviderOpenCodeZen):
1191 case string(catwalk.InferenceProviderOpenCodeGo), string(catwalk.InferenceProviderOpenCodeZen):
968 if opencodeMessagesModels[model.Model] {
1192 if opencodeMessagesModels[model.Model] {
@@ -1001,6 +1225,11 @@ func (c *coordinator) buildProvider(providerCfg config.ProviderConfig, model con
1001 }
1225 }
1002 return c.buildOpenaiCompatProvider(baseURL, apiKey, headers, providerCfg.ExtraBody, providerCfg.ID, isSubAgent)
1226 return c.buildOpenaiCompatProvider(baseURL, apiKey, headers, providerCfg.ExtraBody, providerCfg.ID, isSubAgent)
1003 default:
1227 default:
1228+ // Known custom providers (litellm, ollama, omlx) are
1229+ // openai-compat under the hood.
1230+ if discover.IsKnownCustomProvider(string(providerCfg.Type)) {
1231+ return c.buildOpenaiCompatProvider(baseURL, apiKey, headers, providerCfg.ExtraBody, providerCfg.ID, isSubAgent)
1232+ }
1004 return nil, fmt.Errorf("provider type not supported: %q", providerCfg.Type)
1233 return nil, fmt.Errorf("provider type not supported: %q", providerCfg.Type)
1005 }
1234 }
1006}
1235}
@@ -1016,6 +1245,15 @@ func isExactoSupported(modelID string) bool {
1016 return slices.Contains(supportedModels, modelID)
1245 return slices.Contains(supportedModels, modelID)
1017}
1246}
1018
1247
1248+// BeginAccepted reserves an accept slot for sessionID on the active
1249+// agent and returns the ownership handle. It is the fire-and-forget
1250+// dispatch path's only way to mark a run as accepted-but-not-yet-active
1251+// so a cancel arriving before the run registers in activeRequests is not
1252+// lost.
1253+func (c *coordinator) BeginAccepted(sessionID string) *AcceptedRun {
1254+ return c.currentAgent.BeginAccepted(sessionID)
1255+}
1256+
1019func (c *coordinator) Cancel(sessionID string) {
1257func (c *coordinator) Cancel(sessionID string) {
1020 c.currentAgent.Cancel(sessionID)
1258 c.currentAgent.Cancel(sessionID)
1021}
1259}
@@ -1048,15 +1286,34 @@ func (c *coordinator) UpdateModels(ctx context.Context) error {
1048 }
1286 }
1049 c.currentAgent.SetModels(large, small)
1287 c.currentAgent.SetModels(large, small)
1050
1288
1289+ cfg := c.cfg.Config()
1051− agentCfg, ok := c.cfg.Config().Agents[config.AgentCoder]
1290+ agentCfg, ok := cfg.Agents[config.AgentCoder]
1052 if !ok {
1291 if !ok {
1053 return errCoderAgentNotConfigured
1292 return errCoderAgentNotConfigured
1054 }
1293 }
1055
1294
1295+ // Fast path: reuse cached tools when neither the config nor the MCP
1296+ // tool set has changed since the last build.
1297+ mcpGen := c.mcpToolsGen.Load()
1298+ c.toolsCacheMu.Lock()
1299+ if c.toolsCache != nil && c.toolsCacheCfg == cfg && c.toolsCacheMCP == mcpGen {
1300+ c.currentAgent.SetTools(c.toolsCache)
1301+ c.toolsCacheMu.Unlock()
1302+ return nil
1303+ }
1304+ c.toolsCacheMu.Unlock()
1305+
1056 tools, err := c.buildTools(ctx, agentCfg, false)
1306 tools, err := c.buildTools(ctx, agentCfg, false)
1057 if err != nil {
1307 if err != nil {
1058 return err
1308 return err
1059 }
1309 }
1310+
1311+ c.toolsCacheMu.Lock()
1312+ c.toolsCache = tools
1313+ c.toolsCacheCfg = cfg
1314+ c.toolsCacheMCP = mcpGen
1315+ c.toolsCacheMu.Unlock()
1316+
1060 c.currentAgent.SetTools(tools)
1317 c.currentAgent.SetTools(tools)
1061 return nil
1318 return nil
1062}
1319}
@@ -1086,6 +1343,14 @@ func (c *coordinator) Summarize(ctx context.Context, sessionID string) error {
1086 return c.runWithUnauthorizedRetry(ctx, providerCfg, summarize)
1343 return c.runWithUnauthorizedRetry(ctx, providerCfg, summarize)
1087}
1344}
1088
1345
1346+// GenerateTitle generates a session title using the current agent.
1347+func (c *coordinator) GenerateTitle(ctx context.Context, sessionID, prompt string) {
1348+ if c.currentAgent == nil {
1349+ return
1350+ }
1351+ c.currentAgent.GenerateTitle(ctx, sessionID, prompt)
1352+}
1353+
1089// refreshTokenIfExpired proactively refreshes the OAuth token if it has expired.
1354// refreshTokenIfExpired proactively refreshes the OAuth token if it has expired.
1090func (c *coordinator) refreshTokenIfExpired(ctx context.Context, providerCfg config.ProviderConfig) error {
1355func (c *coordinator) refreshTokenIfExpired(ctx context.Context, providerCfg config.ProviderConfig) error {
1091 if providerCfg.OAuthToken == nil || !providerCfg.OAuthToken.IsExpired() {
1356 if providerCfg.OAuthToken == nil || !providerCfg.OAuthToken.IsExpired() {
@@ -1230,12 +1495,29 @@ func (c *coordinator) runSubAgent(ctx context.Context, params subAgentParams) (f
1230 return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to generate response: %s", err)), nil
1495 return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to generate response: %s", err)), nil
1231 }
1496 }
1232
1497
1233− // Update parent session cost
1498+ // Update parent session cost on a best-effort basis. A failure here must
1499+ // not discard the sub-agent output that was already produced.
1234 if err := c.updateParentSessionCost(ctx, session.ID, params.SessionID); err != nil {
1500 if err := c.updateParentSessionCost(ctx, session.ID, params.SessionID); err != nil {
1235− return fantasy.ToolResponse{}, err
1501+ slog.Warn(
1502+ "Failed to update parent session cost",
1503+ "child_session", session.ID,
1504+ "parent_session", params.SessionID,
1505+ "error", err,
1506+ )
1236 }
1507 }
1237
1508
1509+ output := subAgentOutput(result)
1510+ if output == "" {
1511+ return fantasy.NewTextErrorResponse("Sub-agent completed but produced no text output."), nil
1512+ }
1238− return fantasy.NewTextResponse(result.Response.Content.Text()), nil
1513+ return fantasy.NewTextResponse(output), nil
1514+}
1515+
1516+func subAgentOutput(result *fantasy.AgentResult) string {
1517+ if result == nil {
1518+ return ""
1519+ }
1520+ return result.Response.Content.Text()
1239}
1521}
1240
1522
1241// updateParentSessionCost accumulates the cost from a child session to its parent session.
1523// updateParentSessionCost accumulates the cost from a child session to its parent session.
internal/agent/coordinator_test.go+130
@@ -9,6 +9,7 @@ import (
9 "charm.land/fantasy"
9 "charm.land/fantasy"
10 "charm.land/fantasy/providers/anthropic"
10 "charm.land/fantasy/providers/anthropic"
11 "charm.land/fantasy/providers/bedrock"
11 "charm.land/fantasy/providers/bedrock"
12+ "charm.land/fantasy/providers/openaicompat"
12 "github.com/charmbracelet/crush/internal/config"
13 "github.com/charmbracelet/crush/internal/config"
13 "github.com/stretchr/testify/assert"
14 "github.com/stretchr/testify/assert"
14 "github.com/stretchr/testify/require"
15 "github.com/stretchr/testify/require"
@@ -25,6 +26,10 @@ func (m *mockSessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fan
25 return m.runFunc(ctx, call)
26 return m.runFunc(ctx, call)
26}
27}
27
28
29+func (m *mockSessionAgent) BeginAccepted(sessionID string) *AcceptedRun {
30+ return &AcceptedRun{sessionID: sessionID}
31+}
32+
28func (m *mockSessionAgent) Model() Model { return m.model }
33func (m *mockSessionAgent) Model() Model { return m.model }
29func (m *mockSessionAgent) SetModels(large, small Model) {}
34func (m *mockSessionAgent) SetModels(large, small Model) {}
30func (m *mockSessionAgent) SetTools(tools []fantasy.AgentTool) {}
35func (m *mockSessionAgent) SetTools(tools []fantasy.AgentTool) {}
@@ -41,6 +46,7 @@ func (m *mockSessionAgent) ClearQueue(sessionID string) {}
41func (m *mockSessionAgent) Summarize(context.Context, string, fantasy.ProviderOptions) error {
46func (m *mockSessionAgent) Summarize(context.Context, string, fantasy.ProviderOptions) error {
42 return nil
47 return nil
43}
48}
49+func (m *mockSessionAgent) GenerateTitle(context.Context, string, string) {}
44
50
45// newTestCoordinator creates a minimal coordinator for unit testing runSubAgent.
51// newTestCoordinator creates a minimal coordinator for unit testing runSubAgent.
46func newTestCoordinator(t *testing.T, env fakeEnv, providerID string, providerCfg config.ProviderConfig) *coordinator {
52func newTestCoordinator(t *testing.T, env fakeEnv, providerID string, providerCfg config.ProviderConfig) *coordinator {
@@ -50,6 +56,7 @@ func newTestCoordinator(t *testing.T, env fakeEnv, providerID string, providerCf
50 return &coordinator{
56 return &coordinator{
51 cfg: cfg,
57 cfg: cfg,
52 sessions: env.sessions,
58 sessions: env.sessions,
59+ messages: env.messages,
53 }
60 }
54}
61}
55
62
@@ -109,6 +116,99 @@ func TestRunSubAgent(t *testing.T) {
109 assert.False(t, resp.IsError)
116 assert.False(t, resp.IsError)
110 })
117 })
111
118
119+ t.Run("cost update failure preserves output", func(t *testing.T) {
120+ env := testEnv(t)
121+ coord := newTestCoordinator(t, env, providerID, providerCfg)
122+
123+ agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
124+ return agentResultWithText("output before cost failure"), nil
125+ })
126+
127+ resp, err := coord.runSubAgent(t.Context(), subAgentParams{
128+ Agent: agent,
129+ SessionID: "missing-parent-session",
130+ AgentMessageID: "msg-1",
131+ ToolCallID: "call-1",
132+ Prompt: "test",
133+ SessionTitle: "Test",
134+ })
135+ require.NoError(t, err)
136+ assert.False(t, resp.IsError)
137+ assert.Equal(t, "output before cost failure", resp.Content)
138+ })
139+
140+ t.Run("response with text returns it", func(t *testing.T) {
141+ env := testEnv(t)
142+ coord := newTestCoordinator(t, env, providerID, providerCfg)
143+
144+ parentSession, err := env.sessions.Create(t.Context(), "Parent")
145+ require.NoError(t, err)
146+
147+ agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
148+ return agentResultWithText("the answer"), nil
149+ })
150+
151+ resp, err := coord.runSubAgent(t.Context(), subAgentParams{
152+ Agent: agent,
153+ SessionID: parentSession.ID,
154+ AgentMessageID: "msg-1",
155+ ToolCallID: "call-1",
156+ Prompt: "test",
157+ SessionTitle: "Test",
158+ })
159+ require.NoError(t, err)
160+ assert.False(t, resp.IsError)
161+ assert.Equal(t, "the answer", resp.Content)
162+ })
163+
164+ t.Run("nil result returns error response", func(t *testing.T) {
165+ env := testEnv(t)
166+ coord := newTestCoordinator(t, env, providerID, providerCfg)
167+
168+ parentSession, err := env.sessions.Create(t.Context(), "Parent")
169+ require.NoError(t, err)
170+
171+ agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
172+ return nil, nil
173+ })
174+
175+ resp, err := coord.runSubAgent(t.Context(), subAgentParams{
176+ Agent: agent,
177+ SessionID: parentSession.ID,
178+ AgentMessageID: "msg-1",
179+ ToolCallID: "call-1",
180+ Prompt: "test",
181+ SessionTitle: "Test",
182+ })
183+ require.NoError(t, err)
184+ assert.True(t, resp.IsError)
185+ assert.Equal(t, "Sub-agent completed but produced no text output.", resp.Content)
186+ })
187+
188+ t.Run("empty result returns error response", func(t *testing.T) {
189+ env := testEnv(t)
190+ coord := newTestCoordinator(t, env, providerID, providerCfg)
191+
192+ parentSession, err := env.sessions.Create(t.Context(), "Parent")
193+ require.NoError(t, err)
194+
195+ agent := newMockAgent(providerID, 4096, func(_ context.Context, _ SessionAgentCall) (*fantasy.AgentResult, error) {
196+ return &fantasy.AgentResult{}, nil
197+ })
198+
199+ resp, err := coord.runSubAgent(t.Context(), subAgentParams{
200+ Agent: agent,
201+ SessionID: parentSession.ID,
202+ AgentMessageID: "msg-1",
203+ ToolCallID: "call-1",
204+ Prompt: "test",
205+ SessionTitle: "Test",
206+ })
207+ require.NoError(t, err)
208+ assert.True(t, resp.IsError)
209+ assert.Equal(t, "Sub-agent completed but produced no text output.", resp.Content)
210+ })
211+
112 t.Run("ModelCfg.MaxTokens overrides default", func(t *testing.T) {
212 t.Run("ModelCfg.MaxTokens overrides default", func(t *testing.T) {
113 env := testEnv(t)
213 env := testEnv(t)
114 coord := newTestCoordinator(t, env, providerID, providerCfg)
214 coord := newTestCoordinator(t, env, providerID, providerCfg)
@@ -422,3 +522,33 @@ func TestGetProviderOptionsReasoningEffort(t *testing.T) {
422 })
522 })
423 }
523 }
424}
524}
525+
526+func TestGetProviderOptionsReasoningEffortFallback(t *testing.T) {
527+ model := Model{
528+ CatwalkCfg: catwalk.Model{
529+ ID: "glm-5.2",
530+ CanReason: true,
531+ ReasoningLevels: []string{"high", "max"},
532+ },
533+ ModelCfg: config.SelectedModel{
534+ Provider: "zai",
535+ },
536+ }
537+ providerCfg := config.ProviderConfig{
538+ ID: string(catwalk.InferenceProviderZAI),
539+ Type: openaicompat.Name,
540+ }
541+
542+ opts := getProviderOptions(model, providerCfg)
543+
544+ raw, ok := opts[openaicompat.Name]
545+ require.True(t, ok)
546+ parsed, ok := raw.(*openaicompat.ProviderOptions)
547+ require.True(t, ok)
548+ require.NotNil(t, parsed.ReasoningEffort)
549+ assert.Equal(t, "high", string(*parsed.ReasoningEffort))
550+
551+ thinking, ok := parsed.ExtraBody["thinking"].(map[string]any)
552+ require.True(t, ok)
553+ assert.Equal(t, "enabled", thinking["type"])
554+}
internal/agent/dispatch_cancel_test.gonew file+447
@@ -0,0 +1,447 @@
1+package agent
2+
3+import (
4+ "context"
5+ "errors"
6+ "sync/atomic"
7+ "testing"
8+ "time"
9+
10+ "charm.land/fantasy"
11+ "github.com/charmbracelet/crush/internal/agent/notify"
12+ "github.com/charmbracelet/crush/internal/message"
13+ "github.com/charmbracelet/crush/internal/pubsub"
14+ "github.com/stretchr/testify/assert"
15+ "github.com/stretchr/testify/require"
16+)
17+
18+// finishStreamModel is a minimal fantasy.LanguageModel that streams a
19+// single text part followed by a normal (FinishReasonStop) finish. It
20+// is enough to drive sessionAgent.Run through PrepareStep and a clean
21+// completion without a recorded provider cassette.
22+type finishStreamModel struct {
23+ text string
24+}
25+
26+func (m *finishStreamModel) Provider() string { return "fake" }
27+func (m *finishStreamModel) Model() string { return "fake-model" }
28+
29+func (m *finishStreamModel) Generate(ctx context.Context, call fantasy.Call) (*fantasy.Response, error) {
30+ return &fantasy.Response{
31+ Content: fantasy.ResponseContent{fantasy.TextContent{Text: m.text}},
32+ FinishReason: fantasy.FinishReasonStop,
33+ }, nil
34+}
35+
36+func (m *finishStreamModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.StreamResponse, error) {
37+ text := m.text
38+ return func(yield func(fantasy.StreamPart) bool) {
39+ if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextStart, ID: "1"}) {
40+ return
41+ }
42+ if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextDelta, ID: "1", Delta: text}) {
43+ return
44+ }
45+ if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextEnd, ID: "1"}) {
46+ return
47+ }
48+ yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeFinish, FinishReason: fantasy.FinishReasonStop})
49+ }, nil
50+}
51+
52+func (m *finishStreamModel) GenerateObject(ctx context.Context, call fantasy.ObjectCall) (*fantasy.ObjectResponse, error) {
53+ return nil, errors.New("not implemented")
54+}
55+
56+func (m *finishStreamModel) StreamObject(ctx context.Context, call fantasy.ObjectCall) (fantasy.ObjectStreamResponse, error) {
57+ return nil, errors.New("not implemented")
58+}
59+
60+func newStreamTestAgent(t *testing.T) (*sessionAgent, fakeEnv) {
61+ t.Helper()
62+ env := testEnv(t)
63+ model := &finishStreamModel{text: "done"}
64+ sa := testSessionAgent(env, model, model, "system").(*sessionAgent)
65+ return sa, env
66+}
67+
68+// TestCancel_ActiveAndAcceptedFiresBothBranches covers the case where a
69+// session is actively running (activeRequests set) AND a follow-up has
70+// been accepted (acceptedRuns > 0). A single Cancel must fire both: it
71+// invokes the active cancel func and records a pending cancel for the
72+// accepted follow-up.
73+func TestCancel_ActiveAndAcceptedFiresBothBranches(t *testing.T) {
74+ t.Parallel()
75+ sa, _ := newCancelTestAgent(t)
76+
77+ const sid = "sid"
78+ var activeCanceled atomic.Bool
79+ sa.activeRequests.Set(sid, func() { activeCanceled.Store(true) })
80+
81+ accept := sa.BeginAccepted(sid)
82+ defer accept.Close()
83+
84+ sa.Cancel(sid)
85+
86+ require.True(t, activeCanceled.Load(), "active cancel func must fire")
87+ require.True(t, sa.hasPendingCancel(sid), "accepted follow-up must record a pending cancel")
88+}
89+
90+// TestRun_BusyWithPendingCancelTakesCancelOnEntry covers the busy-queue
91+// branch consulting pendingCancels: when the session is busy AND a
92+// cancel has been recorded for an accepted follow-up, Run must take the
93+// cancel-on-entry path (persist a canceled turn) instead of enqueueing
94+// the call behind the active run.
95+func TestRun_BusyWithPendingCancelTakesCancelOnEntry(t *testing.T) {
96+ t.Parallel()
97+ sa, env := newCancelTestAgent(t)
98+
99+ sess, err := env.sessions.Create(t.Context(), "session")
100+ require.NoError(t, err)
101+
102+ // Make the session look busy: an earlier prompt is active.
103+ sa.activeRequests.Set(sess.ID, func() {})
104+
105+ accept := sa.BeginAccepted(sess.ID)
106+ // A cancel arrives while this follow-up is accepted-but-not-active.
107+ sa.Cancel(sess.ID)
108+ require.True(t, sa.hasPendingCancel(sess.ID))
109+
110+ result, err := sa.Run(t.Context(), SessionAgentCall{
111+ SessionID: sess.ID,
112+ Prompt: "follow-up",
113+ Accepted: accept,
114+ })
115+ require.NoError(t, err)
116+ require.Nil(t, result)
117+
118+ // The follow-up was canceled on entry, not enqueued.
119+ require.Equal(t, 0, sa.QueuedPrompts(sess.ID),
120+ "cancel-on-entry must not enqueue the follow-up behind the active run")
121+ require.False(t, sa.hasPendingCancel(sess.ID), "pending cancel must be consumed")
122+ require.Equal(t, 0, sa.acceptedCount(sess.ID), "accept reservation must be released")
123+
124+ msgs, err := env.messages.List(t.Context(), sess.ID)
125+ require.NoError(t, err)
126+ require.Len(t, msgs, 2)
127+ assert.Equal(t, message.User, msgs[0].Role)
128+ assert.Equal(t, message.Assistant, msgs[1].Role)
129+ assert.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
130+}
131+
132+// TestRun_PrepareStepDrainSkipsQueuedOnPendingCancel verifies that the
133+// queue drain inside PrepareStep skips queued follow-up prompts when a
134+// cancel has been recorded for the session: the queued prompt must not
135+// be folded into the active turn as an extra user message.
136+func TestRun_PrepareStepDrainSkipsQueuedOnPendingCancel(t *testing.T) {
137+ t.Parallel()
138+ sa, env := newStreamTestAgent(t)
139+
140+ sess, err := env.sessions.Create(t.Context(), "session")
141+ require.NoError(t, err)
142+
143+ // A follow-up prompt sits queued for the session.
144+ sa.enqueueCall(SessionAgentCall{SessionID: sess.ID, Prompt: "queued-followup"})
145+ // A cancel was recorded for the session while it sat in the queue.
146+ sa.cancelMark.Set(sess.ID, 1)
147+
148+ result, err := sa.Run(t.Context(), SessionAgentCall{
149+ SessionID: sess.ID,
150+ Prompt: "main",
151+ })
152+ require.NoError(t, err)
153+ require.NotNil(t, result)
154+
155+ // Only the main prompt produced a user message; the queued
156+ // follow-up was skipped, not folded into the turn.
157+ msgs, err := env.messages.List(t.Context(), sess.ID)
158+ require.NoError(t, err)
159+ var userMsgs []message.Message
160+ for _, m := range msgs {
161+ if m.Role == message.User {
162+ userMsgs = append(userMsgs, m)
163+ }
164+ }
165+ require.Len(t, userMsgs, 1, "queued follow-up must not create a user message")
166+ assert.Equal(t, "main", userMsgs[0].Content().String())
167+
168+ // The queue was drained and the pending cancel consumed.
169+ require.Equal(t, 0, sa.QueuedPrompts(sess.ID))
170+ require.False(t, sa.hasPendingCancel(sess.ID))
171+}
172+
173+// TestRun_NormalCompletionClearsStalePendingCancel verifies that a Run
174+// which completes normally clears any stale pending-cancel entry for the
175+// session, so it cannot catch a future run.
176+func TestRun_NormalCompletionClearsStalePendingCancel(t *testing.T) {
177+ t.Parallel()
178+ sa, env := newStreamTestAgent(t)
179+
180+ sess, err := env.sessions.Create(t.Context(), "session")
181+ require.NoError(t, err)
182+
183+ // A stale cancel mark lingers (no queued work, no accepted run).
184+ sa.cancelMark.Set(sess.ID, 1)
185+
186+ result, err := sa.Run(t.Context(), SessionAgentCall{
187+ SessionID: sess.ID,
188+ Prompt: "main",
189+ })
190+ require.NoError(t, err)
191+ require.NotNil(t, result)
192+
193+ require.False(t, sa.hasPendingCancel(sess.ID),
194+ "normal completion must clear the stale pending cancel")
195+
196+ msgs, err := env.messages.List(t.Context(), sess.ID)
197+ require.NoError(t, err)
198+ require.Len(t, msgs, 2)
199+ assert.Equal(t, message.Assistant, msgs[1].Role)
200+ assert.Equal(t, message.FinishReasonEndTurn, msgs[1].FinishReason())
201+}
202+
203+// newCancelTestAgentWithRunComplete builds a DB-backed sessionAgent wired
204+// to a RunComplete broker so tests can observe the terminal event a
205+// RunID-bearing caller (e.g. `crush run`) blocks on.
206+func newCancelTestAgentWithRunComplete(t *testing.T) (*sessionAgent, fakeEnv, *pubsub.Broker[notify.RunComplete]) {
207+ t.Helper()
208+ env := testEnv(t)
209+ broker := pubsub.NewBroker[notify.RunComplete]()
210+ t.Cleanup(broker.Shutdown)
211+ sa := NewSessionAgent(SessionAgentOptions{
212+ Sessions: env.sessions,
213+ Messages: env.messages,
214+ RunComplete: broker,
215+ }).(*sessionAgent)
216+ return sa, env, broker
217+}
218+
219+// TestRun_CancelOnEntryPublishesRunComplete covers the first review
220+// finding: the cancel-on-entry path returned before the streaming defer
221+// that publishes RunComplete was installed. A caller that dispatches a
222+// run with a RunID and blocks on RunComplete (ignoring message events,
223+// like `crush run`) would hang on an immediately-canceled accepted run.
224+// The cancel-on-entry path must publish a terminal RunComplete carrying
225+// the originating RunID.
226+func TestRun_CancelOnEntryPublishesRunComplete(t *testing.T) {
227+ t.Parallel()
228+ sa, env, broker := newCancelTestAgentWithRunComplete(t)
229+
230+ sess, err := env.sessions.Create(t.Context(), "session")
231+ require.NoError(t, err)
232+
233+ ctx, cancel := context.WithCancel(t.Context())
234+ defer cancel()
235+ ch := broker.Subscribe(ctx)
236+
237+ accept := sa.BeginAccepted(sess.ID)
238+ // A cancel arrives in the accepted-but-not-yet-active window.
239+ sa.Cancel(sess.ID)
240+ require.True(t, sa.hasPendingCancel(sess.ID))
241+
242+ result, err := sa.Run(t.Context(), SessionAgentCall{
243+ SessionID: sess.ID,
244+ RunID: "run-cancel-on-entry",
245+ Prompt: "hello",
246+ Accepted: accept,
247+ })
248+ require.NoError(t, err)
249+ require.Nil(t, result)
250+
251+ select {
252+ case got := <-ch:
253+ assert.Equal(t, "run-cancel-on-entry", got.Payload.RunID,
254+ "RunComplete must echo the originating RunID")
255+ assert.Equal(t, sess.ID, got.Payload.SessionID)
256+ assert.True(t, got.Payload.Cancelled,
257+ "cancel-on-entry RunComplete must be marked cancelled")
258+ case <-time.After(2 * time.Second):
259+ t.Fatal("cancel-on-entry must publish RunComplete; a RunID caller would hang otherwise")
260+ }
261+}
262+
263+// TestCancel_TwoAcceptedBothObserveCancellation covers the second review
264+// finding: a single cancel with two accepted-not-yet-active prompts must
265+// cancel both. The cancel raises the session's high-water mark to the
266+// latest accept sequence, so every prompt accepted-but-not-yet-active at
267+// cancel time is covered and both take the cancel-on-entry path.
268+func TestCancel_TwoAcceptedBothObserveCancellation(t *testing.T) {
269+ t.Parallel()
270+ sa, env := newCancelTestAgent(t)
271+
272+ sess, err := env.sessions.Create(t.Context(), "session")
273+ require.NoError(t, err)
274+
275+ // Two prompts are accepted-but-not-yet-active for the same session.
276+ accept1 := sa.BeginAccepted(sess.ID)
277+ accept2 := sa.BeginAccepted(sess.ID)
278+ require.Equal(t, 2, sa.acceptedCount(sess.ID))
279+
280+ // A single cancel arrives before either becomes active.
281+ sa.Cancel(sess.ID)
282+ require.Equal(t, accept2.seq, sa.pendingCancelMark(sess.ID),
283+ "one cancel must mark every currently-accepted prompt as canceled")
284+ require.GreaterOrEqual(t, sa.pendingCancelMark(sess.ID), accept1.seq,
285+ "the mark must cover the earlier accepted prompt too")
286+
287+ // Both prompts enter Run; each must take cancel-on-entry, not run.
288+ r1, err := sa.Run(t.Context(), SessionAgentCall{
289+ SessionID: sess.ID,
290+ Prompt: "first",
291+ Accepted: accept1,
292+ })
293+ require.NoError(t, err)
294+ require.Nil(t, r1)
295+
296+ r2, err := sa.Run(t.Context(), SessionAgentCall{
297+ SessionID: sess.ID,
298+ Prompt: "second",
299+ Accepted: accept2,
300+ })
301+ require.NoError(t, err)
302+ require.Nil(t, r2)
303+
304+ require.False(t, sa.hasPendingCancel(sess.ID),
305+ "both reserved units must be consumed")
306+ require.Equal(t, 0, sa.acceptedCount(sess.ID),
307+ "both accept reservations must be released")
308+
309+ // Each canceled-on-entry turn writes a user + canceled assistant
310+ // message, and neither prompt was enqueued to run normally.
311+ require.Equal(t, 0, sa.QueuedPrompts(sess.ID),
312+ "neither accepted prompt may be enqueued to run normally")
313+ msgs, err := env.messages.List(t.Context(), sess.ID)
314+ require.NoError(t, err)
315+ require.Len(t, msgs, 4, "two canceled turns produce two user + two assistant messages")
316+ var canceled int
317+ for _, m := range msgs {
318+ if m.Role == message.Assistant {
319+ assert.Equal(t, message.FinishReasonCanceled, m.FinishReason())
320+ canceled++
321+ }
322+ }
323+ require.Equal(t, 2, canceled, "both turns must finish canceled")
324+}
325+
326+// TestRun_IdleCancelDoesNotPoisonNextPrompt covers the idle-cancel
327+// no-op guarantee end-to-end: an Escape on an idle session must not
328+// record a pending cancel that leaks into the next accepted prompt, which
329+// must run normally to completion.
330+func TestRun_IdleCancelDoesNotPoisonNextPrompt(t *testing.T) {
331+ t.Parallel()
332+ sa, env := newStreamTestAgent(t)
333+
334+ sess, err := env.sessions.Create(t.Context(), "session")
335+ require.NoError(t, err)
336+
337+ // Idle Escape: no accepted run, no active request.
338+ sa.Cancel(sess.ID)
339+ require.False(t, sa.hasPendingCancel(sess.ID),
340+ "idle cancel must not record a pending cancel")
341+
342+ // The next accepted prompt must run normally, not cancel on entry.
343+ accept := sa.BeginAccepted(sess.ID)
344+ result, err := sa.Run(t.Context(), SessionAgentCall{
345+ SessionID: sess.ID,
346+ Prompt: "next",
347+ Accepted: accept,
348+ })
349+ require.NoError(t, err)
350+ require.NotNil(t, result, "next prompt must run normally after an idle cancel")
351+
352+ msgs, err := env.messages.List(t.Context(), sess.ID)
353+ require.NoError(t, err)
354+ require.Len(t, msgs, 2)
355+ assert.Equal(t, message.User, msgs[0].Role)
356+ assert.Equal(t, message.Assistant, msgs[1].Role)
357+ assert.Equal(t, message.FinishReasonEndTurn, msgs[1].FinishReason(),
358+ "the prompt must finish normally, not canceled")
359+}
360+
361+// TestCancel_AcceptedAfterCancelIsNotPoisoned is the regression test for
362+// the reviewer's finding: a counted session-level pending cancel let a
363+// prompt accepted after the cancel enter Run first and consume a unit
364+// reserved for the earlier prompts. With a sequence high-water mark, a
365+// single cancel covers exactly the prompts accepted-but-not-yet-active at
366+// cancel time (A and B); a prompt accepted afterwards (C) gets a higher
367+// sequence and must run normally without consuming A or B's cancellation.
368+// C is run first to prove it neither cancels nor drains the mark, then A
369+// and B are run and must both cancel on entry.
370+func TestCancel_AcceptedAfterCancelIsNotPoisoned(t *testing.T) {
371+ t.Parallel()
372+ sa, env := newStreamTestAgent(t)
373+
374+ sess, err := env.sessions.Create(t.Context(), "session")
375+ require.NoError(t, err)
376+
377+ // A and B are accepted-but-not-yet-active.
378+ acceptA := sa.BeginAccepted(sess.ID)
379+ acceptB := sa.BeginAccepted(sess.ID)
380+
381+ // One cancel arrives covering both A and B.
382+ sa.Cancel(sess.ID)
383+ require.True(t, sa.hasPendingCancel(sess.ID))
384+ require.Equal(t, acceptB.seq, sa.pendingCancelMark(sess.ID),
385+ "the mark must cover every prompt accepted before the cancel")
386+
387+ // C is accepted AFTER the cancel; its sequence is above the mark.
388+ acceptC := sa.BeginAccepted(sess.ID)
389+ require.Greater(t, acceptC.seq, sa.pendingCancelMark(sess.ID),
390+ "a prompt accepted after the cancel must not be covered by the mark")
391+
392+ // Run C first. It must run normally to completion and must not
393+ // consume or clear the cancellation reserved for A and B.
394+ rc, err := sa.Run(t.Context(), SessionAgentCall{
395+ SessionID: sess.ID,
396+ Prompt: "C",
397+ Accepted: acceptC,
398+ })
399+ require.NoError(t, err)
400+ require.NotNil(t, rc, "C was accepted after the cancel and must run normally")
401+ require.True(t, sa.hasPendingCancel(sess.ID),
402+ "running C must not drain the cancellation reserved for A and B")
403+
404+ // Now A and B run. Both were accepted before the cancel and must
405+ // take the cancel-on-entry path.
406+ ra, err := sa.Run(t.Context(), SessionAgentCall{
407+ SessionID: sess.ID,
408+ Prompt: "A",
409+ Accepted: acceptA,
410+ })
411+ require.NoError(t, err)
412+ require.Nil(t, ra, "A must cancel on entry, not run")
413+
414+ rb, err := sa.Run(t.Context(), SessionAgentCall{
415+ SessionID: sess.ID,
416+ Prompt: "B",
417+ Accepted: acceptB,
418+ })
419+ require.NoError(t, err)
420+ require.Nil(t, rb, "B must cancel on entry, not run")
421+
422+ require.False(t, sa.hasPendingCancel(sess.ID),
423+ "the mark clears once all covered handles are resolved")
424+ require.Equal(t, 0, sa.acceptedCount(sess.ID))
425+ require.Equal(t, 0, sa.QueuedPrompts(sess.ID),
426+ "neither A nor B may be enqueued to run normally")
427+
428+ // C produced a normal turn; A and B each produced a canceled turn.
429+ msgs, err := env.messages.List(t.Context(), sess.ID)
430+ require.NoError(t, err)
431+ require.Len(t, msgs, 6, "C normal + A canceled + B canceled = 3 user + 3 assistant")
432+
433+ var normal, canceled int
434+ for _, m := range msgs {
435+ if m.Role != message.Assistant {
436+ continue
437+ }
438+ switch m.FinishReason() {
439+ case message.FinishReasonEndTurn:
440+ normal++
441+ case message.FinishReasonCanceled:
442+ canceled++
443+ }
444+ }
445+ require.Equal(t, 1, normal, "only C finished normally")
446+ require.Equal(t, 2, canceled, "both A and B finished canceled")
447+}
internal/agent/hyper/provider.go+25−3
@@ -11,6 +11,7 @@ import (
11 "net/http"
11 "net/http"
12 "os"
12 "os"
13 "sync"
13 "sync"
14+ "sync/atomic"
14 "time"
15 "time"
15
16
16 "charm.land/catwalk/pkg/catwalk"
17 "charm.land/catwalk/pkg/catwalk"
@@ -47,9 +48,30 @@ var BaseURL = sync.OnceValue(func() string {
47 return cmp.Or(os.Getenv("HYPER_URL"), defaultBaseURL)
48 return cmp.Or(os.Getenv("HYPER_URL"), defaultBaseURL)
48})
49})
49
50
50−// FetchCredits calls the Hyper /v1/credits endpoint and returns the remaining
51+// lastKnownBalance stores the most recently extracted hypercredit balance
51−// credits count.
52+// from API response metadata. FetchCredits checks this before making a
53+// separate HTTP call.
54+var lastKnownBalance atomic.Int64
55+
56+// hasBalance tracks whether lastKnownBalance has been set.
57+var hasBalance atomic.Bool
58+
59+// SetBalance stores a credit balance extracted from API response metadata.
60+func SetBalance(balance int) {
61+ lastKnownBalance.Store(int64(balance))
62+ hasBalance.Store(true)
63+}
64+
65+// FetchCredits returns the remaining hypercredit balance. It first checks
66+// for a balance extracted from the most recent API response's usage
67+// metadata. If none is available, it falls back to calling the /v1/credits
68+// endpoint directly.
52func FetchCredits(ctx context.Context, apiKey string) (int, error) {
69func FetchCredits(ctx context.Context, apiKey string) (int, error) {
70+ if hasBalance.Load() {
71+ hasBalance.Store(false)
72+ return int(lastKnownBalance.Load()), nil
73+ }
74+
53 req, err := http.NewRequestWithContext(
75 req, err := http.NewRequestWithContext(
54 ctx,
76 ctx,
55 http.MethodGet,
77 http.MethodGet,
@@ -66,7 +88,7 @@ func FetchCredits(ctx context.Context, apiKey string) (int, error) {
66 if err != nil {
88 if err != nil {
67 return 0, fmt.Errorf("failed to make request: %w", err)
89 return 0, fmt.Errorf("failed to make request: %w", err)
68 }
90 }
69− defer resp.Body.Close() //nolint:errcheck
91+ defer resp.Body.Close()
70
92
71 if resp.StatusCode != http.StatusOK {
93 if resp.StatusCode != http.StatusOK {
72 return 0, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
94 return 0, fmt.Errorf("unexpected status code: %d", resp.StatusCode)
internal/agent/hyper/provider.json+126−63
@@ -3,39 +3,49 @@
3 "id": "hyper",
3 "id": "hyper",
4 "api_endpoint": "https://hyper.charm.land/api/v1/fantasy",
4 "api_endpoint": "https://hyper.charm.land/api/v1/fantasy",
5 "type": "hyper",
5 "type": "hyper",
6− "default_large_model_id": "kimi-k2.6",
6+ "default_large_model_id": "qwen3.7-plus",
7 "default_small_model_id": "deepseek-v4-flash",
7 "default_small_model_id": "deepseek-v4-flash",
8 "models": [
8 "models": [
9 {
9 {
10 "id": "deepseek-v4-flash",
10 "id": "deepseek-v4-flash",
11 "name": "DeepSeek V4 Flash",
11 "name": "DeepSeek V4 Flash",
12− "cost_per_1m_in": 0.1446,
12+ "cost_per_1m_in": 0.14,
13− "cost_per_1m_out": 0.2912,
13+ "cost_per_1m_out": 0.28,
14− "cost_per_1m_in_cached": 0.0723,
14+ "cost_per_1m_in_cached": 0.0028,
15 "cost_per_1m_out_cached": 0,
15 "cost_per_1m_out_cached": 0,
16− "context_window": 1048576,
16+ "context_window": 1000000,
17− "default_max_tokens": 104857,
17+ "default_max_tokens": 384000,
18 "can_reason": true,
18 "can_reason": true,
19+ "reasoning_levels": [
20+ "high",
21+ "xhigh"
22+ ],
23+ "default_reasoning_effort": "high",
19 "supports_attachments": false
24 "supports_attachments": false
20 },
25 },
21 {
26 {
22 "id": "deepseek-v4-pro",
27 "id": "deepseek-v4-pro",
23 "name": "DeepSeek V4 Pro",
28 "name": "DeepSeek V4 Pro",
24− "cost_per_1m_in": 1.6082,
29+ "cost_per_1m_in": 0.435,
25− "cost_per_1m_out": 3.2164,
30+ "cost_per_1m_out": 0.87,
26− "cost_per_1m_in_cached": 0.8041,
31+ "cost_per_1m_in_cached": 0.0036,
27 "cost_per_1m_out_cached": 0,
32 "cost_per_1m_out_cached": 0,
28− "context_window": 1048576,
33+ "context_window": 1000000,
29− "default_max_tokens": 60000,
34+ "default_max_tokens": 384000,
30 "can_reason": true,
35 "can_reason": true,
36+ "reasoning_levels": [
37+ "high",
38+ "xhigh"
39+ ],
40+ "default_reasoning_effort": "high",
31 "supports_attachments": false
41 "supports_attachments": false
32 },
42 },
33 {
43 {
34 "id": "gemma-4-26b-a4b-it",
44 "id": "gemma-4-26b-a4b-it",
35 "name": "Gemma 4 26B A4B",
45 "name": "Gemma 4 26B A4B",
36− "cost_per_1m_in": 0.12,
46+ "cost_per_1m_in": 0.126,
37− "cost_per_1m_out": 0.408,
47+ "cost_per_1m_out": 0.42,
38− "cost_per_1m_in_cached": 0.06,
48+ "cost_per_1m_in_cached": 0.063,
39 "cost_per_1m_out_cached": 0,
49 "cost_per_1m_out_cached": 0,
40 "context_window": 256000,
50 "context_window": 256000,
41 "default_max_tokens": 25600,
51 "default_max_tokens": 25600,
@@ -45,9 +55,9 @@
45 {
55 {
46 "id": "glm-5",
56 "id": "glm-5",
47 "name": "GLM-5",
57 "name": "GLM-5",
48− "cost_per_1m_in": 0.92,
58+ "cost_per_1m_in": 0.86,
49− "cost_per_1m_out": 2.976,
59+ "cost_per_1m_out": 2.784,
50− "cost_per_1m_in_cached": 0.46,
60+ "cost_per_1m_in_cached": 0.43,
51 "cost_per_1m_out_cached": 0,
61 "cost_per_1m_out_cached": 0,
52 "context_window": 202752,
62 "context_window": 202752,
53 "default_max_tokens": 20275,
63 "default_max_tokens": 20275,
@@ -57,21 +67,44 @@
57 {
67 {
58 "id": "glm-5.1",
68 "id": "glm-5.1",
59 "name": "GLM-5.1",
69 "name": "GLM-5.1",
60− "cost_per_1m_in": 1.33,
70+ "cost_per_1m_in": 1.3,
61− "cost_per_1m_out": 4.22,
71+ "cost_per_1m_out": 4.3,
62− "cost_per_1m_in_cached": 0.665,
72+ "cost_per_1m_in_cached": 0.26,
63 "cost_per_1m_out_cached": 0,
73 "cost_per_1m_out_cached": 0,
64− "context_window": 202750,
74+ "context_window": 202000,
65− "default_max_tokens": 3276,
75+ "default_max_tokens": 202000,
66 "can_reason": true,
76 "can_reason": true,
77+ "reasoning_levels": [
78+ "low",
79+ "medium",
80+ "high"
81+ ],
82+ "default_reasoning_effort": "medium",
83+ "supports_attachments": false
84+ },
85+ {
86+ "id": "glm-5.2",
87+ "name": "GLM-5.2",
88+ "cost_per_1m_in": 1.5,
89+ "cost_per_1m_out": 4.5,
90+ "cost_per_1m_in_cached": 0.3,
91+ "cost_per_1m_out_cached": 0,
92+ "context_window": 1000000,
93+ "default_max_tokens": 128000,
94+ "can_reason": true,
95+ "reasoning_levels": [
96+ "high",
97+ "xhigh"
98+ ],
99+ "default_reasoning_effort": "high",
67 "supports_attachments": false
100 "supports_attachments": false
68 },
101 },
69 {
102 {
70 "id": "gpt-oss-120b",
103 "id": "gpt-oss-120b",
71 "name": "gpt-oss-120b",
104 "name": "gpt-oss-120b",
72− "cost_per_1m_in": 0.19,
105+ "cost_per_1m_in": 0.168,
73− "cost_per_1m_out": 0.63,
106+ "cost_per_1m_out": 0.562,
74− "cost_per_1m_in_cached": 0.095,
107+ "cost_per_1m_in_cached": 0.084,
75 "cost_per_1m_out_cached": 0,
108 "cost_per_1m_out_cached": 0,
76 "context_window": 131072,
109 "context_window": 131072,
77 "default_max_tokens": 13107,
110 "default_max_tokens": 13107,
@@ -87,9 +120,9 @@
87 {
120 {
88 "id": "kimi-k2.5",
121 "id": "kimi-k2.5",
89 "name": "Kimi K2.5",
122 "name": "Kimi K2.5",
90− "cost_per_1m_in": 0.522,
123+ "cost_per_1m_in": 0.51,
91− "cost_per_1m_out": 2.69,
124+ "cost_per_1m_out": 2.67,
92− "cost_per_1m_in_cached": 0.261,
125+ "cost_per_1m_in_cached": 0.255,
93 "cost_per_1m_out_cached": 0,
126 "cost_per_1m_out_cached": 0,
94 "context_window": 262144,
127 "context_window": 262144,
95 "default_max_tokens": 26214,
128 "default_max_tokens": 26214,
@@ -99,21 +132,45 @@
99 {
132 {
100 "id": "kimi-k2.6",
133 "id": "kimi-k2.6",
101 "name": "Kimi K2.6",
134 "name": "Kimi K2.6",
102− "cost_per_1m_in": 0.956,
135+ "cost_per_1m_in": 0.95,
103 "cost_per_1m_out": 4,
136 "cost_per_1m_out": 4,
104− "cost_per_1m_in_cached": 0.478,
137+ "cost_per_1m_in_cached": 0.16,
105 "cost_per_1m_out_cached": 0,
138 "cost_per_1m_out_cached": 0,
106− "context_window": 262142,
139+ "context_window": 262000,
107− "default_max_tokens": 26214,
140+ "default_max_tokens": 262000,
108 "can_reason": true,
141 "can_reason": true,
142+ "reasoning_levels": [
143+ "low",
144+ "medium",
145+ "high"
146+ ],
147+ "default_reasoning_effort": "medium",
148+ "supports_attachments": true
149+ },
150+ {
151+ "id": "kimi-k2.7-code",
152+ "name": "Kimi K2.7 Code",
153+ "cost_per_1m_in": 0.95,
154+ "cost_per_1m_out": 4,
155+ "cost_per_1m_in_cached": 0.19,
156+ "cost_per_1m_out_cached": 0,
157+ "context_window": 256000,
158+ "default_max_tokens": 32768,
159+ "can_reason": true,
160+ "reasoning_levels": [
161+ "low",
162+ "medium",
163+ "high"
164+ ],
165+ "default_reasoning_effort": "medium",
109− "supports_attachments": false
166+ "supports_attachments": true
110 },
167 },
111 {
168 {
112 "id": "llama-3.3-70b-instruct",
169 "id": "llama-3.3-70b-instruct",
113 "name": "Llama 3.3 70B Instruct",
170 "name": "Llama 3.3 70B Instruct",
114− "cost_per_1m_in": 0.45,
171+ "cost_per_1m_in": 0.6066,
115− "cost_per_1m_out": 0.72,
172+ "cost_per_1m_out": 1.0386,
116− "cost_per_1m_in_cached": 0.225,
173+ "cost_per_1m_in_cached": 0.3033,
117 "cost_per_1m_out_cached": 0,
174 "cost_per_1m_out_cached": 0,
118 "context_window": 128000,
175 "context_window": 128000,
119 "default_max_tokens": 12800,
176 "default_max_tokens": 12800,
@@ -123,9 +180,9 @@
123 {
180 {
124 "id": "llama-4-maverick-17b-128e-instruct-fp8",
181 "id": "llama-4-maverick-17b-128e-instruct-fp8",
125 "name": "Llama 4 Maverick 17B 128E Instruct FP8",
182 "name": "Llama 4 Maverick 17B 128E Instruct FP8",
126− "cost_per_1m_in": 0.35,
183+ "cost_per_1m_in": 0.274,
127− "cost_per_1m_out": 1.08,
184+ "cost_per_1m_out": 0.894,
128− "cost_per_1m_in_cached": 0.175,
185+ "cost_per_1m_in_cached": 0.137,
129 "cost_per_1m_out_cached": 0,
186 "cost_per_1m_out_cached": 0,
130 "context_window": 430000,
187 "context_window": 430000,
131 "default_max_tokens": 43000,
188 "default_max_tokens": 43000,
@@ -135,25 +192,19 @@
135 {
192 {
136 "id": "minimax-m2.7",
193 "id": "minimax-m2.7",
137 "name": "MiniMax M2.7",
194 "name": "MiniMax M2.7",
138− "cost_per_1m_in": 0.38,
195+ "cost_per_1m_in": 0.3,
139− "cost_per_1m_out": 1.52,
196+ "cost_per_1m_out": 1.2,
140− "cost_per_1m_in_cached": 0.19,
197+ "cost_per_1m_in_cached": 0.06,
141− "cost_per_1m_out_cached": 0,
198+ "cost_per_1m_out_cached": 0.375,
142 "context_window": 204800,
199 "context_window": 204800,
143− "default_max_tokens": 20480,
200+ "default_max_tokens": 131000,
144− "can_reason": false,
201+ "can_reason": true,
145− "supports_attachments": false
202+ "reasoning_levels": [
146− },
203+ "low",
147− {
204+ "medium",
148− "id": "mistral-large-instruct-2411",
205+ "high"
149− "name": "Mistral Large Instruct 2411",
206+ ],
150− "cost_per_1m_in": 2,
207+ "default_reasoning_effort": "medium",
151− "cost_per_1m_out": 6,
152− "cost_per_1m_in_cached": 1,
153− "cost_per_1m_out_cached": 0,
154− "context_window": 128000,
155− "default_max_tokens": 12800,
156− "can_reason": false,
157 "supports_attachments": false
208 "supports_attachments": false
158 },
209 },
159 {
210 {
@@ -204,12 +255,24 @@
204 "can_reason": true,
255 "can_reason": true,
205 "supports_attachments": false
256 "supports_attachments": false
206 },
257 },
258+ {
259+ "id": "qwen3.7-plus",
260+ "name": "Qwen3.7-Plus",
261+ "cost_per_1m_in": 1.2,
262+ "cost_per_1m_out": 4.8,
263+ "cost_per_1m_in_cached": 1.5,
264+ "cost_per_1m_out_cached": 0.12,
265+ "context_window": 1000000,
266+ "default_max_tokens": 64000,
267+ "can_reason": true,
268+ "supports_attachments": true
269+ },
207 {
270 {
208 "id": "qwen3-coder-480b-a35b-instruct-int4-mixed-ar",
271 "id": "qwen3-coder-480b-a35b-instruct-int4-mixed-ar",
209 "name": "Qwen3 Coder 480B A35B Instruct INT4 Mixed AR",
272 "name": "Qwen3 Coder 480B A35B Instruct INT4 Mixed AR",
210− "cost_per_1m_in": 0.736,
273+ "cost_per_1m_in": 0.557,
211− "cost_per_1m_out": 2.03,
274+ "cost_per_1m_out": 2.545,
212− "cost_per_1m_in_cached": 0.368,
275+ "cost_per_1m_in_cached": 0.2785,
213 "cost_per_1m_out_cached": 0,
276 "cost_per_1m_out_cached": 0,
214 "context_window": 106000,
277 "context_window": 106000,
215 "default_max_tokens": 10600,
278 "default_max_tokens": 10600,
@@ -219,9 +282,9 @@
219 {
282 {
220 "id": "qwen3-next-80b-a3b-instruct",
283 "id": "qwen3-next-80b-a3b-instruct",
221 "name": "Qwen3 Next 80B A3B Instruct",
284 "name": "Qwen3 Next 80B A3B Instruct",
222− "cost_per_1m_in": 0.1175,
285+ "cost_per_1m_in": 0.128,
223− "cost_per_1m_out": 1.136,
286+ "cost_per_1m_out": 1.28,
224− "cost_per_1m_in_cached": 0.05875,
287+ "cost_per_1m_in_cached": 0.064,
225 "cost_per_1m_out_cached": 0,
288 "cost_per_1m_out_cached": 0,
226 "context_window": 262144,
289 "context_window": 262144,
227 "default_max_tokens": 26214,
290 "default_max_tokens": 26214,
internal/agent/loop_detection.go+17−17
@@ -1,8 +1,7 @@
1package agent
1package agent
2
2
3import (
3import (
4− "crypto/sha256"
4+ "hash/fnv"
5− "encoding/hex"
6 "io"
5 "io"
7
6
8 "charm.land/fantasy"
7 "charm.land/fantasy"
@@ -22,11 +21,11 @@ func hasRepeatedToolCalls(steps []fantasy.StepResult, windowSize, maxRepeats int
22 }
21 }
23
22
24 window := steps[len(steps)-windowSize:]
23 window := steps[len(steps)-windowSize:]
25− counts := make(map[string]int)
24+ counts := make(map[uint64]int, windowSize)
26
25
27 for _, step := range window {
26 for _, step := range window {
28 sig := getToolInteractionSignature(step.Content)
27 sig := getToolInteractionSignature(step.Content)
29− if sig == "" {
28+ if sig == 0 {
30 continue
29 continue
31 }
30 }
32 counts[sig]++
31 counts[sig]++
@@ -40,34 +39,35 @@ func hasRepeatedToolCalls(steps []fantasy.StepResult, windowSize, maxRepeats int
40
39
41// getToolInteractionSignature computes a hash signature for the tool
40// getToolInteractionSignature computes a hash signature for the tool
42// interactions in a single step's content. It pairs tool calls with their
41// interactions in a single step's content. It pairs tool calls with their
43−// results (matched by ToolCallID) and returns a hex-encoded SHA-256 hash.
42+// results (matched by ToolCallID) and returns an FNV-1a hash. FNV is ~10x
43+// faster than SHA-256 and collision risk is negligible for loop detection
44−// If the step contains no tool calls, it returns "".
44+// over a 10-step window. If the step contains no tool calls, it returns 0.
45−func getToolInteractionSignature(content fantasy.ResponseContent) string {
45+func getToolInteractionSignature(content fantasy.ResponseContent) uint64 {
46 toolCalls := content.ToolCalls()
46 toolCalls := content.ToolCalls()
47 if len(toolCalls) == 0 {
47 if len(toolCalls) == 0 {
48− return ""
48+ return 0
49 }
49 }
50
50
51 // Index tool results by their ToolCallID for fast lookup.
51 // Index tool results by their ToolCallID for fast lookup.
52− resultsByID := make(map[string]fantasy.ToolResultContent)
52+ resultsByID := make(map[string]fantasy.ToolResultContent, len(toolCalls))
53 for _, tr := range content.ToolResults() {
53 for _, tr := range content.ToolResults() {
54 resultsByID[tr.ToolCallID] = tr
54 resultsByID[tr.ToolCallID] = tr
55 }
55 }
56
56
57− h := sha256.New()
57+ h := fnv.New64a()
58 for _, tc := range toolCalls {
58 for _, tc := range toolCalls {
59 output := ""
59 output := ""
60 if tr, ok := resultsByID[tc.ToolCallID]; ok {
60 if tr, ok := resultsByID[tc.ToolCallID]; ok {
61 output = toolResultOutputString(tr.Result)
61 output = toolResultOutputString(tr.Result)
62 }
62 }
63− io.WriteString(h, tc.ToolName)
63+ _, _ = io.WriteString(h, tc.ToolName)
64− io.WriteString(h, "\x00")
64+ h.Write([]byte{0})
65− io.WriteString(h, tc.Input)
65+ _, _ = io.WriteString(h, tc.Input)
66− io.WriteString(h, "\x00")
66+ h.Write([]byte{0})
67− io.WriteString(h, output)
67+ _, _ = io.WriteString(h, output)
68− io.WriteString(h, "\x00")
68+ h.Write([]byte{0})
69 }
69 }
70− return hex.EncodeToString(h.Sum(nil))
70+ return h.Sum64()
71}
71}
72
72
73// toolResultOutputString converts a ToolResultOutputContent to a stable string
73// toolResultOutputString converts a ToolResultOutputContent to a stable string
internal/agent/loop_detection_test.go+8−8
@@ -145,18 +145,18 @@ func TestHasRepeatedToolCalls(t *testing.T) {
145func TestGetToolInteractionSignature(t *testing.T) {
145func TestGetToolInteractionSignature(t *testing.T) {
146 t.Run("empty content returns empty string", func(t *testing.T) {
146 t.Run("empty content returns empty string", func(t *testing.T) {
147 sig := getToolInteractionSignature(fantasy.ResponseContent{})
147 sig := getToolInteractionSignature(fantasy.ResponseContent{})
148− if sig != "" {
148+ if sig != 0 {
149− t.Errorf("expected empty string, got %q", sig)
149+ t.Errorf("expected zero signature, got %d", sig)
150 }
150 }
151 })
151 })
152
152
153− t.Run("text only content returns empty string", func(t *testing.T) {
153+ t.Run("text only content returns zero signature", func(t *testing.T) {
154 content := fantasy.ResponseContent{
154 content := fantasy.ResponseContent{
155 fantasy.TextContent{Text: "hello"},
155 fantasy.TextContent{Text: "hello"},
156 }
156 }
157 sig := getToolInteractionSignature(content)
157 sig := getToolInteractionSignature(content)
158− if sig != "" {
158+ if sig != 0 {
159− t.Errorf("expected empty string, got %q", sig)
159+ t.Errorf("expected zero signature, got %d", sig)
160 }
160 }
161 })
161 })
162
162
@@ -166,8 +166,8 @@ func TestGetToolInteractionSignature(t *testing.T) {
166 fantasy.ToolResultContent{ToolCallID: "1", ToolName: "read", Result: fantasy.ToolResultOutputContentText{Text: "content"}},
166 fantasy.ToolResultContent{ToolCallID: "1", ToolName: "read", Result: fantasy.ToolResultOutputContentText{Text: "content"}},
167 }
167 }
168 sig := getToolInteractionSignature(content)
168 sig := getToolInteractionSignature(content)
169− if sig == "" {
169+ if sig == 0 {
170− t.Error("expected non-empty signature")
170+ t.Error("expected non-zero signature")
171 }
171 }
172 })
172 })
173
173
@@ -183,7 +183,7 @@ func TestGetToolInteractionSignature(t *testing.T) {
183 sig1 := getToolInteractionSignature(content1)
183 sig1 := getToolInteractionSignature(content1)
184 sig2 := getToolInteractionSignature(content2)
184 sig2 := getToolInteractionSignature(content2)
185 if sig1 != sig2 {
185 if sig1 != sig2 {
186− t.Errorf("expected same signature for same interactions, got %q and %q", sig1, sig2)
186+ t.Errorf("expected same signature for same interactions, got %d and %d", sig1, sig2)
187 }
187 }
188 })
188 })
189
189
internal/agent/notify/notify.go+12
@@ -12,6 +12,9 @@ const (
12 // TypeReAuthenticate indicates the agent encountered an
12 // TypeReAuthenticate indicates the agent encountered an
13 // authentication error and the user needs to re-authenticate.
13 // authentication error and the user needs to re-authenticate.
14 TypeReAuthenticate Type = "re_authenticate"
14 TypeReAuthenticate Type = "re_authenticate"
15+ // TypeAgentError indicates the agent's turn terminated with an
16+ // error. The error text is carried in Notification.Message.
17+ TypeAgentError Type = "error"
15)
18)
16
19
17// Notification represents a domain event published by the agent.
20// Notification represents a domain event published by the agent.
@@ -20,6 +23,15 @@ type Notification struct {
20 SessionTitle string
23 SessionTitle string
21 Type Type
24 Type Type
22 ProviderID string
25 ProviderID string
26+ // RunID, when non-empty, is the caller-supplied correlator
27+ // (proto.AgentMessage.RunID) for the run that produced this
28+ // notification. It lets observers attribute a TypeAgentError to a
29+ // specific request rather than to any in-flight run on the
30+ // session. Empty when no caller set one.
31+ RunID string
32+ // Message carries the error text for TypeAgentError. Other
33+ // notification types ignore it.
34+ Message string
23}
35}
24
36
25// RunComplete is the authoritative end-of-run signal for a session.
37// RunComplete is the authoritative end-of-run signal for a session.
internal/agent/prompt/prompt.go+31−22
@@ -29,16 +29,17 @@ type Prompt struct {
29}
29}
30
30
31type PromptDat struct {
31type PromptDat struct {
32− Provider string
32+ Provider string
33− Model string
33+ Model string
34− Config config.Config
34+ Config config.Config
35− WorkingDir string
35+ WorkingDir string
36− IsGitRepo bool
36+ IsGitRepo bool
37− Platform string
37+ Platform string
38− Date string
38+ Date string
39− GitStatus string
39+ GitStatus string
40− ContextFiles []ContextFile
40+ ContextFiles []ContextFile
41+ GlobalContextFiles []ContextFile
41− AvailSkillXML string
42+ AvailSkillXML string
42}
43}
43
44
44type ContextFile struct {
45type ContextFile struct {
@@ -114,7 +115,7 @@ func processContextPath(p string, store *config.ConfigStore) []ContextFile {
114 return contexts
115 return contexts
115 }
116 }
116 if info.IsDir() {
117 if info.IsDir() {
117− filepath.WalkDir(fullPath, func(path string, d os.DirEntry, err error) error {
118+ _ = filepath.WalkDir(fullPath, func(path string, d os.DirEntry, err error) error {
118 if err != nil {
119 if err != nil {
119 return err
120 return err
120 }
121 }
@@ -147,22 +148,27 @@ func expandPath(path string, store *config.ConfigStore) string {
147 return path
148 return path
148}
149}
149
150
150−func (p *Prompt) promptData(ctx context.Context, provider, model string, store *config.ConfigStore) (PromptDat, error) {
151+// loadContextFiles loads and deduplicates context files from a list of paths.
151− workingDir := cmp.Or(p.workingDir, store.WorkingDir())
152+func loadContextFiles(paths []string, store *config.ConfigStore) map[string][]ContextFile {
152− platform := cmp.Or(p.platform, runtime.GOOS)
153−
154 files := map[string][]ContextFile{}
153 files := map[string][]ContextFile{}
155−
156− cfg := store.Config()
157− for _, pth := range cfg.Options.ContextPaths {
154+ for _, pth := range paths {
158 expanded := expandPath(pth, store)
155 expanded := expandPath(pth, store)
159 pathKey := strings.ToLower(expanded)
156 pathKey := strings.ToLower(expanded)
160 if _, ok := files[pathKey]; ok {
157 if _, ok := files[pathKey]; ok {
161 continue
158 continue
162 }
159 }
163− content := processContextPath(expanded, store)
160+ files[pathKey] = processContextPath(expanded, store)
164− files[pathKey] = content
165 }
161 }
162+ return files
163+}
164+
165+func (p *Prompt) promptData(ctx context.Context, provider, model string, store *config.ConfigStore) (PromptDat, error) {
166+ workingDir := cmp.Or(p.workingDir, store.WorkingDir())
167+ platform := cmp.Or(p.platform, runtime.GOOS)
168+
169+ cfg := store.Config()
170+ contextFiles := loadContextFiles(cfg.Options.ContextPaths, store)
171+ globalContextFiles := loadContextFiles(cfg.Options.GlobalContextPaths, store)
166
172
167 // Discover and load skills metadata.
173 // Discover and load skills metadata.
168 var availSkillXML string
174 var availSkillXML string
@@ -217,8 +223,11 @@ func (p *Prompt) promptData(ctx context.Context, provider, model string, store *
217 }
223 }
218 }
224 }
219
225
220− for _, contextFiles := range files {
226+ for _, files := range contextFiles {
221− data.ContextFiles = append(data.ContextFiles, contextFiles...)
227+ data.ContextFiles = append(data.ContextFiles, files...)
228+ }
229+ for _, files := range globalContextFiles {
230+ data.GlobalContextFiles = append(data.GlobalContextFiles, files...)
222 }
231 }
223 return data, nil
232 return data, nil
224}
233}
internal/agent/queued_runid_test.gonew file+181
@@ -0,0 +1,181 @@
1+package agent
2+
3+import (
4+ "context"
5+ "errors"
6+ "sync/atomic"
7+ "testing"
8+ "time"
9+
10+ "charm.land/catwalk/pkg/catwalk"
11+ "charm.land/fantasy"
12+ "github.com/charmbracelet/crush/internal/agent/notify"
13+ "github.com/charmbracelet/crush/internal/message"
14+ "github.com/charmbracelet/crush/internal/pubsub"
15+ "github.com/stretchr/testify/require"
16+)
17+
18+// gatedStreamModel streams a single text part followed by a clean finish,
19+// but blocks the very first Stream call until its gate is released. That
20+// lets a test hold a run "active" (past PrepareStep, inside Stream) just
21+// long enough to enqueue a follow-up prompt behind the busy session.
22+// Subsequent Stream calls (e.g. the recursive run draining the queue)
23+// proceed immediately.
24+type gatedStreamModel struct {
25+ text string
26+ gate chan struct{}
27+ entered chan struct{}
28+ calls atomic.Int64
29+}
30+
31+func (m *gatedStreamModel) Provider() string { return "fake" }
32+func (m *gatedStreamModel) Model() string { return "fake-model" }
33+
34+func (m *gatedStreamModel) Generate(ctx context.Context, call fantasy.Call) (*fantasy.Response, error) {
35+ return &fantasy.Response{
36+ Content: fantasy.ResponseContent{fantasy.TextContent{Text: m.text}},
37+ FinishReason: fantasy.FinishReasonStop,
38+ }, nil
39+}
40+
41+func (m *gatedStreamModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.StreamResponse, error) {
42+ if m.calls.Add(1) == 1 {
43+ close(m.entered)
44+ select {
45+ case <-m.gate:
46+ case <-ctx.Done():
47+ }
48+ }
49+ text := m.text
50+ return func(yield func(fantasy.StreamPart) bool) {
51+ if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextStart, ID: "1"}) {
52+ return
53+ }
54+ if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextDelta, ID: "1", Delta: text}) {
55+ return
56+ }
57+ if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeTextEnd, ID: "1"}) {
58+ return
59+ }
60+ yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeFinish, FinishReason: fantasy.FinishReasonStop})
61+ }, nil
62+}
63+
64+func (m *gatedStreamModel) GenerateObject(ctx context.Context, call fantasy.ObjectCall) (*fantasy.ObjectResponse, error) {
65+ return nil, errors.New("not implemented")
66+}
67+
68+func (m *gatedStreamModel) StreamObject(ctx context.Context, call fantasy.ObjectCall) (fantasy.ObjectStreamResponse, error) {
69+ return nil, errors.New("not implemented")
70+}
71+
72+// TestRun_QueuedRunIDPromptRunsRecursivelyAndPublishesRunComplete is the
73+// end-to-end proof of fix 2: a prompt carrying a RunID that is queued
74+// behind a busy session must NOT be silently folded into the active turn.
75+// It runs as its own turn via the recursive run path and publishes its
76+// own terminal RunComplete, so a `crush run` caller blocking on that
77+// RunID does not hang. The active turn keeps its own RunComplete too.
78+func TestRun_QueuedRunIDPromptRunsRecursivelyAndPublishesRunComplete(t *testing.T) {
79+ t.Parallel()
80+
81+ env := testEnv(t)
82+ broker := pubsub.NewBroker[notify.RunComplete]()
83+ t.Cleanup(broker.Shutdown)
84+
85+ large := &gatedStreamModel{
86+ text: "done",
87+ gate: make(chan struct{}),
88+ entered: make(chan struct{}),
89+ }
90+ small := &finishStreamModel{text: "title"}
91+
92+ sa := NewSessionAgent(SessionAgentOptions{
93+ LargeModel: Model{Model: large, CatwalkCfg: catwalk.Model{ContextWindow: 200000, DefaultMaxTokens: 10000}},
94+ SmallModel: Model{Model: small, CatwalkCfg: catwalk.Model{ContextWindow: 200000, DefaultMaxTokens: 10000}},
95+ IsYolo: true,
96+ Sessions: env.sessions,
97+ Messages: env.messages,
98+ RunComplete: broker,
99+ }).(*sessionAgent)
100+
101+ sess, err := env.sessions.Create(t.Context(), "session")
102+ require.NoError(t, err)
103+
104+ subCtx, subCancel := context.WithCancel(t.Context())
105+ defer subCancel()
106+ ch := broker.Subscribe(subCtx)
107+
108+ // Start the main turn; it blocks inside Stream once active.
109+ mainDone := make(chan error, 1)
110+ go func() {
111+ _, runErr := sa.Run(t.Context(), SessionAgentCall{
112+ SessionID: sess.ID,
113+ RunID: "run-main",
114+ Prompt: "main",
115+ })
116+ mainDone <- runErr
117+ }()
118+
119+ // Wait until the main turn is active (inside Stream).
120+ select {
121+ case <-large.entered:
122+ case <-time.After(5 * time.Second):
123+ t.Fatal("main run never entered Stream")
124+ }
125+ require.True(t, sa.IsSessionBusy(sess.ID), "main run must be active before enqueueing the follow-up")
126+
127+ // Enqueue a RunID-bearing follow-up behind the busy session.
128+ res, err := sa.Run(t.Context(), SessionAgentCall{
129+ SessionID: sess.ID,
130+ RunID: "run-follow",
131+ Prompt: "follow",
132+ })
133+ require.NoError(t, err)
134+ require.Nil(t, res, "a busy-session follow-up must enqueue and return (nil, nil)")
135+ require.Equal(t, 1, sa.QueuedPrompts(sess.ID), "the follow-up must be queued, not folded")
136+
137+ // Release the main turn so it completes and hands off to the queue.
138+ close(large.gate)
139+ require.NoError(t, <-mainDone)
140+
141+ // Both turns must publish their own terminal RunComplete.
142+ got := map[string]notify.RunComplete{}
143+ deadline := time.After(5 * time.Second)
144+ for len(got) < 2 {
145+ select {
146+ case ev := <-ch:
147+ got[ev.Payload.RunID] = ev.Payload
148+ case <-deadline:
149+ t.Fatalf("timed out waiting for both RunCompletes; got %v", got)
150+ }
151+ }
152+
153+ main, ok := got["run-main"]
154+ require.True(t, ok, "the active turn must publish its own RunComplete")
155+ require.Empty(t, main.Error)
156+ require.False(t, main.Cancelled)
157+
158+ follow, ok := got["run-follow"]
159+ require.True(t, ok,
160+ "the queued RunID prompt must publish its own RunComplete instead of being folded silently")
161+ require.Empty(t, follow.Error)
162+ require.False(t, follow.Cancelled)
163+ require.Equal(t, "done", follow.Text, "the queued prompt ran as its own turn")
164+
165+ // Two distinct assistant turns prove the follow-up was not folded.
166+ msgs, err := env.messages.List(t.Context(), sess.ID)
167+ require.NoError(t, err)
168+ var assistants, follows int
169+ for _, m := range msgs {
170+ switch m.Role {
171+ case message.Assistant:
172+ assistants++
173+ case message.User:
174+ if m.Content().String() == "follow" {
175+ follows++
176+ }
177+ }
178+ }
179+ require.Equal(t, 2, assistants, "the active turn and the recursive turn each produce one assistant message")
180+ require.Equal(t, 1, follows, "the follow-up prompt is its own user turn")
181+}
internal/agent/run_complete_test.go+233
@@ -58,6 +58,138 @@ func TestSessionAgentRun_QueueStripsOnComplete(t *testing.T) {
58 "RunComplete still correlates with the originating SendMessage")
58 "RunComplete still correlates with the originating SendMessage")
59}
59}
60
60
61+// TestDrainQueueForStep_FiltersUnderDispatchLock verifies that the queue
62+// drain evaluates the per-session cancel mark while holding the dispatch
63+// mutex (canceledBySeq's documented precondition). Queued calls at or
64+// below the cancel high-water mark are dropped, calls queued after the
65+// cancel (higher seq) are folded, untracked enqueues (seq == 0) are
66+// dropped whenever any mark is present, and the queue is cleared. These
67+// calls carry no RunID, so all foldable survivors are returned for
68+// folding (the existing follow-up behavior).
69+func TestDrainQueueForStep_FiltersUnderDispatchLock(t *testing.T) {
70+ t.Parallel()
71+
72+ env := testEnv(t)
73+ a := NewSessionAgent(SessionAgentOptions{
74+ Sessions: env.sessions,
75+ Messages: env.messages,
76+ }).(*sessionAgent)
77+
78+ const sessionID = "drain-session"
79+ a.messageQueue.Set(sessionID, []SessionAgentCall{
80+ {SessionID: sessionID, Prompt: "below", acceptSeq: 1},
81+ {SessionID: sessionID, Prompt: "at-mark", acceptSeq: 2},
82+ {SessionID: sessionID, Prompt: "after", acceptSeq: 3},
83+ {SessionID: sessionID, Prompt: "untracked", acceptSeq: 0},
84+ })
85+ // Cancel high-water mark at seq 2: seq <= 2 and seq == 0 are covered.
86+ a.cancelMark.Set(sessionID, 2)
87+
88+ fold, canceledWithRunID := a.drainQueueForStep(sessionID)
89+
90+ require.Len(t, fold, 1,
91+ "only the follow-up queued after the cancel (seq > mark) must be folded")
92+ require.Equal(t, "after", fold[0].Prompt)
93+ require.Empty(t, canceledWithRunID,
94+ "no dropped call carried a RunID, so none need a terminal RunComplete")
95+
96+ _, ok := a.messageQueue.Get(sessionID)
97+ require.False(t, ok, "drain must clear the session message queue when nothing is kept")
98+}
99+
100+// TestDrainQueueForStep_NoMarkFoldsAllNonRunID verifies that with no
101+// cancel mark recorded, every queued call without a RunID is folded.
102+func TestDrainQueueForStep_NoMarkFoldsAllNonRunID(t *testing.T) {
103+ t.Parallel()
104+
105+ env := testEnv(t)
106+ a := NewSessionAgent(SessionAgentOptions{
107+ Sessions: env.sessions,
108+ Messages: env.messages,
109+ }).(*sessionAgent)
110+
111+ const sessionID = "drain-nomark"
112+ a.messageQueue.Set(sessionID, []SessionAgentCall{
113+ {SessionID: sessionID, Prompt: "a", acceptSeq: 0},
114+ {SessionID: sessionID, Prompt: "b", acceptSeq: 5},
115+ })
116+
117+ fold, canceledWithRunID := a.drainQueueForStep(sessionID)
118+ require.Len(t, fold, 2, "no cancel mark means all non-RunID queued calls are folded")
119+ require.Empty(t, canceledWithRunID)
120+}
121+
122+// TestDrainQueueForStep_KeepsRunIDPromptsQueued is the core of fix 2: a
123+// queued prompt that carries a RunID must NOT be folded into the active
124+// turn. Folding it would silently absorb it into another turn and never
125+// publish a RunComplete for its RunID, hanging a `crush run` caller that
126+// blocks on that event. Such prompts are left in the queue so the
127+// recursive run path gives each its own turn and its own RunComplete.
128+// Non-RunID prompts are still folded.
129+func TestDrainQueueForStep_KeepsRunIDPromptsQueued(t *testing.T) {
130+ t.Parallel()
131+
132+ env := testEnv(t)
133+ a := NewSessionAgent(SessionAgentOptions{
134+ Sessions: env.sessions,
135+ Messages: env.messages,
136+ }).(*sessionAgent)
137+
138+ const sessionID = "drain-runid"
139+ a.messageQueue.Set(sessionID, []SessionAgentCall{
140+ {SessionID: sessionID, Prompt: "fold-me", acceptSeq: 1},
141+ {SessionID: sessionID, RunID: "run-a", Prompt: "keep-me", acceptSeq: 2},
142+ {SessionID: sessionID, RunID: "run-b", Prompt: "keep-me-too", acceptSeq: 3},
143+ })
144+
145+ fold, canceledWithRunID := a.drainQueueForStep(sessionID)
146+
147+ require.Len(t, fold, 1, "only the non-RunID prompt is folded into the active turn")
148+ require.Equal(t, "fold-me", fold[0].Prompt)
149+ require.Empty(t, canceledWithRunID)
150+
151+ kept, ok := a.messageQueue.Get(sessionID)
152+ require.True(t, ok, "RunID-bearing prompts must remain queued for the recursive run path")
153+ require.Len(t, kept, 2)
154+ require.Equal(t, "run-a", kept[0].RunID)
155+ require.Equal(t, "run-b", kept[1].RunID)
156+}
157+
158+// TestDrainQueueForStep_ReportsCanceledRunIDDrops verifies that a queued
159+// prompt carrying a RunID that is dropped because a cancel covers it is
160+// reported in canceledWithRunID so the caller can publish its terminal
161+// cancelled RunComplete. A canceled prompt without a RunID is dropped
162+// silently as before.
163+func TestDrainQueueForStep_ReportsCanceledRunIDDrops(t *testing.T) {
164+ t.Parallel()
165+
166+ env := testEnv(t)
167+ a := NewSessionAgent(SessionAgentOptions{
168+ Sessions: env.sessions,
169+ Messages: env.messages,
170+ }).(*sessionAgent)
171+
172+ const sessionID = "drain-cancel-runid"
173+ a.messageQueue.Set(sessionID, []SessionAgentCall{
174+ {SessionID: sessionID, RunID: "run-canceled", Prompt: "canceled", acceptSeq: 1},
175+ {SessionID: sessionID, Prompt: "canceled-no-runid", acceptSeq: 1},
176+ {SessionID: sessionID, RunID: "run-survives", Prompt: "survives", acceptSeq: 5},
177+ })
178+ a.cancelMark.Set(sessionID, 2)
179+
180+ fold, canceledWithRunID := a.drainQueueForStep(sessionID)
181+
182+ require.Empty(t, fold, "no uncanceled non-RunID prompts to fold")
183+ require.Len(t, canceledWithRunID, 1,
184+ "only the dropped RunID-bearing prompt needs a terminal RunComplete")
185+ require.Equal(t, "run-canceled", canceledWithRunID[0].RunID)
186+
187+ kept, ok := a.messageQueue.Get(sessionID)
188+ require.True(t, ok)
189+ require.Len(t, kept, 1, "the uncanceled RunID prompt stays queued")
190+ require.Equal(t, "run-survives", kept[0].RunID)
191+}
192+
61// TestRunCompletePublisher_MustDeliverOverTakesPublish exercises the
193// TestRunCompletePublisher_MustDeliverOverTakesPublish exercises the
62// pubsub.Publisher interface change end-to-end: a Broker is the only
194// pubsub.Publisher interface change end-to-end: a Broker is the only
63// concrete Publisher implementation and must satisfy both Publish and
195// concrete Publisher implementation and must satisfy both Publish and
@@ -87,3 +219,104 @@ func TestRunCompletePublisher_MustDeliverOverTakesPublish(t *testing.T) {
87 t.Fatal("PublishMustDeliver did not deliver event")
219 t.Fatal("PublishMustDeliver did not deliver event")
88 }
220 }
89}
221}
222+
223+// requireSingleCancelledRunComplete reads exactly one RunComplete from ch,
224+// asserts it is the cancelled terminal event for runID, and verifies no
225+// second event arrives. This observes the published pubsub event rather
226+// than internal bookkeeping, which is the contract a `crush run` caller
227+// blocking on the broker actually relies on.
228+func requireSingleCancelledRunComplete(t *testing.T, ch <-chan pubsub.Event[notify.RunComplete], sessionID, runID string) {
229+ t.Helper()
230+ select {
231+ case ev := <-ch:
232+ require.Equal(t, runID, ev.Payload.RunID,
233+ "the published RunComplete must carry the dropped queued prompt's RunID")
234+ require.Equal(t, sessionID, ev.Payload.SessionID)
235+ require.True(t, ev.Payload.Cancelled,
236+ "a dropped queued prompt must publish a cancelled RunComplete")
237+ case <-time.After(5 * time.Second):
238+ t.Fatal("timed out waiting for the cancelled RunComplete")
239+ }
240+ select {
241+ case extra := <-ch:
242+ t.Fatalf("expected exactly one RunComplete, got a second: %+v", extra.Payload)
243+ case <-time.After(100 * time.Millisecond):
244+ }
245+}
246+
247+// TestCancel_QueuedRunIDPromptPublishesCancelledRunComplete proves the
248+// terminal-event behavior end-to-end: a RunID-bearing prompt sitting in
249+// the queue that is canceled while queued (via the public Cancel path,
250+// which routes through clearQueueAndNotify -> publishCanceledQueueDrops)
251+// must emit exactly one cancelled RunComplete on the broker for its
252+// RunID. A queued prompt without a RunID is dropped silently. This is the
253+// coverage the earlier drain test lacked: it asserted the returned
254+// bookkeeping slice, not the published event a `crush run` caller awaits.
255+func TestCancel_QueuedRunIDPromptPublishesCancelledRunComplete(t *testing.T) {
256+ t.Parallel()
257+
258+ env := testEnv(t)
259+ broker := pubsub.NewBroker[notify.RunComplete]()
260+ t.Cleanup(broker.Shutdown)
261+
262+ a := NewSessionAgent(SessionAgentOptions{
263+ Sessions: env.sessions,
264+ Messages: env.messages,
265+ RunComplete: broker,
266+ }).(*sessionAgent)
267+
268+ subCtx, subCancel := context.WithCancel(t.Context())
269+ defer subCancel()
270+ ch := broker.Subscribe(subCtx)
271+
272+ const sessionID = "cancel-queued-runid"
273+ a.messageQueue.Set(sessionID, []SessionAgentCall{
274+ {SessionID: sessionID, Prompt: "no-runid", acceptSeq: 1},
275+ {SessionID: sessionID, RunID: "run-queued", Prompt: "queued", acceptSeq: 2},
276+ })
277+
278+ a.Cancel(sessionID)
279+
280+ requireSingleCancelledRunComplete(t, ch, sessionID, "run-queued")
281+
282+ _, ok := a.messageQueue.Get(sessionID)
283+ require.False(t, ok, "Cancel must clear the queue")
284+}
285+
286+// TestDrainQueueForStep_DroppedRunIDPublishesCancelledRunComplete drives
287+// the production drain sequence (drainQueueForStep then
288+// publishCanceledQueueDrops, mirroring the PrepareStep handoff) and
289+// asserts the dropped RunID-bearing prompt actually publishes exactly one
290+// cancelled RunComplete on the broker. The companion bookkeeping test
291+// covers the returned slice; this one covers the observable terminal
292+// event.
293+func TestDrainQueueForStep_DroppedRunIDPublishesCancelledRunComplete(t *testing.T) {
294+ t.Parallel()
295+
296+ env := testEnv(t)
297+ broker := pubsub.NewBroker[notify.RunComplete]()
298+ t.Cleanup(broker.Shutdown)
299+
300+ a := NewSessionAgent(SessionAgentOptions{
301+ Sessions: env.sessions,
302+ Messages: env.messages,
303+ RunComplete: broker,
304+ }).(*sessionAgent)
305+
306+ subCtx, subCancel := context.WithCancel(t.Context())
307+ defer subCancel()
308+ ch := broker.Subscribe(subCtx)
309+
310+ const sessionID = "drain-drop-runid"
311+ a.messageQueue.Set(sessionID, []SessionAgentCall{
312+ {SessionID: sessionID, RunID: "run-dropped", Prompt: "dropped", acceptSeq: 1},
313+ {SessionID: sessionID, Prompt: "dropped-no-runid", acceptSeq: 1},
314+ })
315+ a.cancelMark.Set(sessionID, 2)
316+
317+ _, canceledWithRunID := a.drainQueueForStep(sessionID)
318+ require.Len(t, canceledWithRunID, 1)
319+ a.publishCanceledQueueDrops(canceledWithRunID)
320+
321+ requireSingleCancelledRunComplete(t, ch, sessionID, "run-dropped")
322+}
internal/agent/run_marker.gonew file+52
@@ -0,0 +1,52 @@
1+package agent
2+
3+import (
4+ "context"
5+ "sync/atomic"
6+)
7+
8+// runCompleteMarkerKey is the unexported context key carrying a
9+// [runCompleteMarker] from the dispatch boundary (backend.runAgent)
10+// down into the coordinator. It lets the dispatcher learn whether the
11+// coordinator already published the authoritative terminal
12+// notify.RunComplete for the run, so a fallback terminal event is only
13+// emitted when one is actually missing (e.g. an error returned before
14+// sessionAgent.Run ever executed). It avoids a breaking change to the
15+// Coordinator interface.
16+type runCompleteMarkerKey struct{}
17+
18+// runCompleteMarker records whether a terminal RunComplete has been
19+// published for a run. It is shared by pointer through the context so
20+// a publish deep in the call stack is observable by the dispatcher
21+// after the call returns.
22+type runCompleteMarker struct {
23+ published atomic.Bool
24+}
25+
26+// WithRunCompleteMarker returns ctx carrying a fresh marker the
27+// coordinator can flag via [MarkRunCompletePublished] once it emits the
28+// run's terminal RunComplete. Callers read the result with
29+// [RunCompletePublished]. Attaching the marker is optional: code paths
30+// without one simply skip the dedup signal.
31+func WithRunCompleteMarker(ctx context.Context) context.Context {
32+ return context.WithValue(ctx, runCompleteMarkerKey{}, &runCompleteMarker{})
33+}
34+
35+// MarkRunCompletePublished records that the authoritative terminal
36+// RunComplete has been published for the run carried by ctx. It is a
37+// no-op when no marker is present (e.g. the in-process/local Run path,
38+// which is not dispatched through backend.runAgent).
39+func MarkRunCompletePublished(ctx context.Context) {
40+ if m, ok := ctx.Value(runCompleteMarkerKey{}).(*runCompleteMarker); ok {
41+ m.published.Store(true)
42+ }
43+}
44+
45+// RunCompletePublished reports whether [MarkRunCompletePublished] was
46+// called on ctx's marker. It returns false when no marker is present.
47+func RunCompletePublished(ctx context.Context) bool {
48+ if m, ok := ctx.Value(runCompleteMarkerKey{}).(*runCompleteMarker); ok {
49+ return m.published.Load()
50+ }
51+ return false
52+}
internal/agent/templates/coder.md.tpl+16−2
@@ -396,11 +396,25 @@ If a skill mentions scripts, references, or assets, they live in the same folder
396{{end}}
396{{end}}
397
397
398{{if .ContextFiles}}
398{{if .ContextFiles}}
399−<memory>
399+# Project-Specific Context
400+Make sure to follow the instructions in the context below.
401+<project_context>
400{{range .ContextFiles}}
402{{range .ContextFiles}}
401<file path="{{.Path}}">
403<file path="{{.Path}}">
402{{.Content}}
404{{.Content}}
403</file>
405</file>
404{{end}}
406{{end}}
405−</memory>
407+</project_context>
408+{{end}}
409+{{if .GlobalContextFiles}}
410+
411+# User context
412+The following is personal content added by the user that they'd like you to follow no matter what project you're working in.
413+<user_preferences>
414+{{range .GlobalContextFiles}}
415+<file path="{{.Path}}">
416+{{.Content}}
417+</file>
418+{{end}}
419+</user_preferences>
406{{end}}
420{{end}}
internal/agent/testdata/TestCoderAgent/glm-5.1/bash_tool.yaml+198−716
@@ -2,138 +2,6 @@
2version: 2
2version: 2
3interactions:
3interactions:
4- id: 0
4- id: 0
5− request:
6− proto: HTTP/1.1
7− proto_major: 1
8− proto_minor: 1
9− content_length: 33985
10− host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12− headers:
13− Accept:
14− - application/json
15− Content-Type:
16− - application/json
17− User-Agent:
18− - Charm-Crush/devel (https://charm.land/crush)
19− url: https://hyper.charm.land/v1/chat/completions
20− method: POST
21− response:
22− proto: HTTP/2.0
23− proto_major: 2
24− proto_minor: 0
25− content_length: -1
26− uncompressed: true
27− body: |+
28− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29−
30− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31−
32− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33−
34− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
35−
36− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
37−
38− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
39−
40− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
41−
42− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
43−
44− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
45−
46− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" named"},"finish_reason":null}]}
47−
48− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
49−
50− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
51−
52− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
53−
54− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
55−
56− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
57−
58− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
59−
60− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
61−
62− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
63−
64− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
65−
66− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
67−
68− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
69−
70− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
71−
72− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
73−
74− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
75−
76− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" not"},"finish_reason":null}]}
77−
78− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
79−
80− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
81−
82− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
83−
84− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
85−
86− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_maHr9QegPpRMRiFEH9e4bSTo","type":"function","index":0,"function":{"name":"bash","arguments":""}}]},"finish_reason":null}]}
87−
88− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
89−
90− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
91−
92− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"command\": "}}]},"finish_reason":null}]}
93−
94− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"echo"}}]},"finish_reason":null}]}
95−
96− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}]}
97−
98− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"hello"}}]},"finish_reason":null}]}
99−
100− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" bash"}}]},"finish_reason":null}]}
101−
102− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"'"}}]},"finish_reason":null}]}
103−
104− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \u003e"}}]},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" test"}}]},"finish_reason":null}]}
107−
108− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
109−
110− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", \"description\": "}}]},"finish_reason":null}]}
111−
112− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"Create"}}]},"finish_reason":null}]}
113−
114− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" test"}}]},"finish_reason":null}]}
115−
116− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
117−
118− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" with"}}]},"finish_reason":null}]}
119−
120− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" content"}}]},"finish_reason":null}]}
121−
122− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
123−
124− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
125−
126− data: {"id":"chatcmpl-3e35182185e98776cee50f17","object":"chat.completion.chunk","created":1780069679,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":715,"completion_tokens":56,"total_tokens":7875,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":32},"cost":{"usd":0.0013062500000000001,"hypercredits":0.026125000000000002},"remaining":{"hypercredits":0}}}
127−
128− data: [DONE]
129−
130− headers:
131− Content-Type:
132− - text/event-stream
133− status: 200 OK
134− code: 200
135− duration: 568.683583ms
136−- id: 1
137 request:
5 request:
138 proto: HTTP/1.1
6 proto: HTTP/1.1
139 proto_major: 1
7 proto_major: 1
@@ -157,739 +25,353 @@ interactions:
157 content_length: -1
25 content_length: -1
158 uncompressed: true
26 uncompressed: true
159 body: |+
27 body: |+
160− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
161−
162− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
163−
164− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
165−
166− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
167−
168− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
169−
170− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
171−
172− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"max"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
201−
202− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
203−
204− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
217−
218− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
219−
220− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
221−
222− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" named"},"finish_reason":null}]}
223−
224− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
225−
226− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
227−
228− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
229−
230− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
231−
232− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
233−
234− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" do"},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" not"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
249−
250− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
251−
252− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
253−
254− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
255−
256− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
257−
258− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
259−
260− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Create"},"finish_reason":null}]}
261−
262− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
263−
264− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
265−
266− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
267−
268− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
269−
270− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
271−
272− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" via"},"finish_reason":null}]}
273−
274− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
275−
276− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
277−
278− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
279−
280− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
281−
282− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
283−
284− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
285−
286− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
287−
288− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
289−
290− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
291−
292− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
293−
294− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
295−
296− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
297−
298− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
299−
300− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
301−
302− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" via"},"finish_reason":null}]}
303−
304− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
305−
306− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
307−
308− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
309−
310− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
311−
312− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
313−
314− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
315−
316− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
317−
318− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
319
29
320− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
321
31
322− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
323
33
324− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
325
35
326− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" generate"},"finish_reason":null}]}
327
37
328− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
329
39
330− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
331
41
332− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" via"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
333
43
334− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" based"},"finish_reason":null}]}
335
45
336− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" on"},"finish_reason":null}]}
337
47
338− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
339
49
340− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
341
51
342− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
343
53
344− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
345
55
346− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
347
57
348− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
349
59
350− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
351
61
352− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wrote"},"finish_reason":null}]}
353
63
354− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
355
65
356− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
357
67
358− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
359
69
360− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
361
71
362− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" must"},"finish_reason":null}]}
363
73
364− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
365
75
366− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
367
77
368− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
369
79
370− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
371
81
372− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
373
83
374− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
375
85
376− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
377
87
378− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
379
89
380− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"col"},"finish_reason":null}]}
381
91
382− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
383
93
384− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
385
95
386− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
387
97
388− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
389
99
390− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
391
101
392− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
393
103
394− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
395
105
396− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
397
107
398− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
399
109
400− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" sentence"},"finish_reason":null}]}
401
111
402− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
403
113
404− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
405
115
406− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
407
117
408− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
409
119
410− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
411
121
412− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
413
123
414− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"bash"},"finish_reason":null}]}
415
125
416− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
417
127
418− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
419
129
420− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
421
131
422− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
423
133
424− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
425
135
426− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
427
137
428− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" without"},"finish_reason":null}]}
429
139
430− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
431
141
432− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
433
143
434− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
435
145
436− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" craft"},"finish_reason":null}]}
437
147
438− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
439
149
440− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
441
151
442− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
443
153
444− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
445
155
446− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
447
157
448− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
449
159
450− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
451
161
452− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
453
163
454− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
455
165
456− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
457
167
458− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
459
169
460− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
461
171
462− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
463
173
464− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
465
175
466− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
467
177
468− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
469
179
470− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
471
181
472− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
473
183
474− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
475
185
476− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
477
187
478− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
479
189
480− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
481
191
482− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
483
193
484− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" v"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
485
195
486− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
487
197
488− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
489
199
490− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Bash"},"finish_reason":null}]}
491
201
492− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
493
203
494− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
495
205
496− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
497
207
498− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
499
209
500− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
501
211
502− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
503
213
504− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
505
215
506− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
507
217
508− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
509
219
510− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
511
221
512− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
513
223
514− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
515
225
516− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
517
227
518− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
519
229
520− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
521
231
522− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
523
233
524− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" bash"},"finish_reason":null}]}
525
235
526− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
527
237
528− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Bash"},"finish_reason":null}]}
529
239
530− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
531
241
532− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-9b4429c7811fb2c7070cc503","object":"chat.completion.chunk","created":1782413792,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":224,"completion_tokens":115,"total_tokens":339,"completion_tokens_details":{"reasoning_tokens":98},"cost":{"usd":0.00015733800000000003,"hypercredits":0.0031467600000000006},"remaining":{"hypercredits":0}}}
533
243
534− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
244+ data: [DONE]
535−
536− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
537−
538− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
539−
540− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
541−
542− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
543−
544− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
545−
546− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
547−
548− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
549−
550− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
551−
552− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
553−
554− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
555−
556− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
557−
558− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
559−
560− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
561−
562− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
563−
564− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
565−
566− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"53"},"finish_reason":null}]}
567−
568− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
569−
570− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"54"},"finish_reason":null}]}
571−
572− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
573−
574− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"55"},"finish_reason":null}]}
575−
576− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
577−
578− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"56"},"finish_reason":null}]}
579−
580− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
581−
582− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"57"},"finish_reason":null}]}
583−
584− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
585−
586− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"58"},"finish_reason":null}]}
587−
588− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
589−
590− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
591−
592− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
593−
594− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"58"},"finish_reason":null}]}
595−
596− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003e"},"finish_reason":null}]}
597−
598− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
599−
600− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
601−
602− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
603−
604− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
605−
606− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
607−
608− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
609−
610− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Try"},"finish_reason":null}]}
611−
612− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" shorter"},"finish_reason":null}]}
613−
614− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
615−
616− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
617−
618− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
619−
620− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
621−
622− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
623−
624− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
625−
626− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
627−
628− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
629−
630− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
631−
632− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
633−
634− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
635−
636− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
637−
638− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
639−
640− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
641−
642− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
643−
644− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
645−
646− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
647−
648− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
649−
650− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
651−
652− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
653−
654− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
655−
656− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
657−
658− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
659−
660− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
661−
662− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
663−
664− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Characters"},"finish_reason":null}]}
665−
666− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
667−
668− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
669−
670− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
671−
672− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
673−
674− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
675−
676− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
677−
678− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
679−
680− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
681−
682− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
683−
684− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
685−
686− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
687−
688− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
689−
690− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
691−
692− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
693−
694− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
695−
696− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
697−
698− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
699−
700− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
701−
702− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
703−
704− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
705−
706− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
707−
708− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
709−
710− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
711−
712− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
713−
714− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
715−
716− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
717−
718− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
719−
720− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" x"},"finish_reason":null}]}
721−
722− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
723−
724− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
725−
726− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
727−
728− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
729−
730− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
731−
732− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
733−
734− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
735−
736− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
737−
738− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
739−
740− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
741−
742− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
743−
744− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
745−
746− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
747−
748− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
749−
750− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
751−
752− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
753−
754− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
755−
756− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
757−
758− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
759−
760− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
761−
762− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
763−
764− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
765−
766− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
767−
768− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
769−
770− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
771−
772− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
773−
774− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
775−
776− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
777−
778− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
779−
780− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
781−
782− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
783−
784− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
785−
786− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
787−
788− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
789−
790− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
791−
792− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ,"},"finish_reason":null}]}
793
245
794− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
246+ headers:
247+ Content-Type:
248+ - text/event-stream
249+ status: 200 OK
250+ code: 200
251+ duration: 700.546792ms
252+- id: 1
253+ request:
254+ proto: HTTP/1.1
255+ proto_major: 1
256+ proto_minor: 1
257+ content_length: 35672
258+ host: ""
259+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use bash to create a file named test.txt with content 'hello bash'. do not print its timestamp\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
260+ headers:
261+ Accept:
262+ - application/json
263+ Content-Type:
264+ - application/json
265+ User-Agent:
266+ - Charm-Crush/devel (https://charm.land/crush)
267+ url: https://hyper.charm.land/v1/chat/completions
268+ method: POST
269+ response:
270+ proto: HTTP/2.0
271+ proto_major: 2
272+ proto_minor: 0
273+ content_length: -1
274+ uncompressed: true
275+ body: |+
276+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
795
277
796− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
797
279
798− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
799
281
800− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
801
283
802− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
803
285
804− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
805
287
806− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
807
289
808− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
809
291
810− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
811
293
812− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" named"},"finish_reason":null}]}
813
295
814− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
815
297
816− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
817
299
818− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
819
301
820− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
821
303
822− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
823
305
824− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
825
307
826− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
827
309
828− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
829
311
830− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
831
313
832− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
833
315
834− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" bash"},"finish_reason":null}]}
835
317
836− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
837
319
838− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
839
321
840− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
841
323
842− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" not"},"finish_reason":null}]}
843
325
844− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
845
327
846− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
847
329
848− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" timestamp"},"finish_reason":null}]}
849
331
850− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
851
333
852− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_51c682620b31061c","type":"function","index":0,"function":{"name":"bash","arguments":""}}]},"finish_reason":null}]}
853
335
854− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"command\": \""}}]},"finish_reason":null}]}
855
337
856− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"echo"}}]},"finish_reason":null}]}
857
339
858− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" '"}}]},"finish_reason":null}]}
859
341
860− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"hello"}}]},"finish_reason":null}]}
861
343
862− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" bash"}}]},"finish_reason":null}]}
863
345
864− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"'"}}]},"finish_reason":null}]}
865
347
866− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \u003e"}}]},"finish_reason":null}]}
867
349
868− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" test"}}]},"finish_reason":null}]}
869
351
870− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
871
353
872− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
873
355
874− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"description\": \""}}]},"finish_reason":null}]}
875
357
876− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Create"}}]},"finish_reason":null}]}
877
359
878− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" test"}}]},"finish_reason":null}]}
879
361
880− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
881
363
882− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" bash"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" with"}}]},"finish_reason":null}]}
883
365
884− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" content"}}]},"finish_reason":null}]}
885
367
886− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" no"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
887
369
888− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" timestamp"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
889
371
890− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
372+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
891
373
892− data: {"id":"chatcmpl-3f896991098deae412ae2685","object":"chat.completion.chunk","created":1780069679,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":224,"completion_tokens":374,"total_tokens":598,"completion_tokens_details":{"reasoning_tokens":356},"cost":{"usd":0.00048562,"hypercredits":0.0097124},"remaining":{"hypercredits":0}}}
374+ data: {"id":"chatcmpl-5baef5f0d9ce99f46bc74840","object":"chat.completion.chunk","created":1782413793,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":686,"completion_tokens":56,"total_tokens":8221,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":32},"cost":{"usd":0.0013476,"hypercredits":0.026952},"remaining":{"hypercredits":0}}}
893
375
894 data: [DONE]
376 data: [DONE]
895
377
@@ -898,15 +380,15 @@ interactions:
898 - text/event-stream
380 - text/event-stream
899 status: 200 OK
381 status: 200 OK
900 code: 200
382 code: 200
901− duration: 439.758791ms
383+ duration: 1.461643167s
902- id: 2
384- id: 2
903 request:
385 request:
904 proto: HTTP/1.1
386 proto: HTTP/1.1
905 proto_major: 1
387 proto_major: 1
906 proto_minor: 1
388 proto_minor: 1
907− content_length: 34451
389+ content_length: 36122
908 host: ""
390 host: ""
909− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_maHr9QegPpRMRiFEH9e4bSTo\",\"function\":{\"arguments\":\"{\\\"command\\\": \\\"echo 'hello bash' > test.txt\\\", \\\"description\\\": \\\"Create test.txt with content\\\"}\",\"name\":\"bash\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to create a file named test.txt with content 'hello bash' using the bash tool, and not print its timestamp.\"},{\"content\":\"no output\",\"tool_call_id\":\"call_maHr9QegPpRMRiFEH9e4bSTo\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
391+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/bash_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use bash to create a file named test.txt with content 'hello bash'. do not print its timestamp\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_51c682620b31061c\",\"function\":{\"arguments\":\"{\\\"command\\\": \\\"echo 'hello bash' > test.txt\\\", \\\"description\\\": \\\"Create test.txt with content\\\"}\",\"name\":\"bash\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to create a file named test.txt with content 'hello bash' using the bash tool, and not print its timestamp.\"},{\"content\":\"no output\",\"tool_call_id\":\"call_51c682620b31061c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
910 headers:
392 headers:
911 Accept:
393 Accept:
912 - application/json
394 - application/json
@@ -923,15 +405,15 @@ interactions:
923 content_length: -1
405 content_length: -1
924 uncompressed: true
406 uncompressed: true
925 body: |+
407 body: |+
926− data: {"id":"chatcmpl-4ab91f0c6c3e7671bcf2a109","object":"chat.completion.chunk","created":1780069682,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
927
409
928− data: {"id":"chatcmpl-4ab91f0c6c3e7671bcf2a109","object":"chat.completion.chunk","created":1780069682,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
929
411
930− data: {"id":"chatcmpl-4ab91f0c6c3e7671bcf2a109","object":"chat.completion.chunk","created":1780069682,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
931
413
932− data: {"id":"chatcmpl-4ab91f0c6c3e7671bcf2a109","object":"chat.completion.chunk","created":1780069682,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
414+ data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
933
415
934− data: {"id":"chatcmpl-4ab91f0c6c3e7671bcf2a109","object":"chat.completion.chunk","created":1780069682,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":45,"completion_tokens":4,"total_tokens":7857,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.0001,"hypercredits":0.002},"remaining":{"hypercredits":0}}}
416+ data: {"id":"chatcmpl-985f3df336cbf13a5d358129","object":"chat.completion.chunk","created":1782413794,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":720,"completion_tokens":4,"total_tokens":8203,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010255999999999998,"hypercredits":0.020511999999999996},"remaining":{"hypercredits":0}}}
935
417
936 data: [DONE]
418 data: [DONE]
937
419
@@ -940,4 +422,4 @@ interactions:
940 - text/event-stream
422 - text/event-stream
941 status: 200 OK
423 status: 200 OK
942 code: 200
424 code: 200
943− duration: 2.925894959s
425+ duration: 1.122182833s
internal/agent/testdata/TestCoderAgent/glm-5.1/download_tool.yaml+177−539
@@ -6,9 +6,9 @@ interactions:
6 proto: HTTP/1.1
6 proto: HTTP/1.1
7 proto_major: 1
7 proto_major: 1
8 proto_minor: 1
8 proto_minor: 1
9− content_length: 34010
9+ content_length: 35697
10 host: ""
10 host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
11+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"download the file from https://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,119 +25,117 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
49
49
50− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
51
51
52− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
53
53
54− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
55
55
56− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
57
57
58− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
59
59
60− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
61
61
62− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
63
63
64− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_4cbf337c01e5b47c","type":"function","index":0,"function":{"name":"download","arguments":""}}]},"finish_reason":null}]}
65
65
66− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_LiiFGSBspKNdPTWMEMOLRvLr","type":"function","index":0,"function":{"name":"download","arguments":""}}]},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
67
67
68− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
69
69
70− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
71
71
72− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
73
73
74− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
75
75
76− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
77
77
78− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
79
79
80− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
81
81
82− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
83
83
84− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
85
85
86− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
87
87
88− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
89
89
90− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
91
91
92− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
93
93
94− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/download"}}]},"finish_reason":null}]}
95
95
96− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
97
97
98− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
99
99
100− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/download"}}]},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
101
101
102− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
103
103
104− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"url\": \""}}]},"finish_reason":null}]}
105
105
106− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"https"}}]},"finish_reason":null}]}
107
107
108− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", \"url\": "}}]},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"://"}}]},"finish_reason":null}]}
109
109
110− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"https"}}]},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"example"}}]},"finish_reason":null}]}
111
111
112− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"://"}}]},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
113
113
114− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"example"}}]},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
115
115
116− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
117
117
118− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert"}}]},"finish_reason":null}]}
119
119
120− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"finish_reason":null}]}
121
121
122− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert"}}]},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/document"}}]},"finish_reason":null}]}
123
123
124− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/t"}}]},"finish_reason":null}]}
125
125
126− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/document"}}]},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"xt"}}]},"finish_reason":null}]}
127
127
128− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/t"}}]},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
129
129
130− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"xt"}}]},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
131
131
132− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
133
133
134− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".txt"}}]},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
135
135
136− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
137
137
138− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
139−
140− data: {"id":"chatcmpl-b24616267883946383972241","object":"chat.completion.chunk","created":1780069683,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":718,"completion_tokens":64,"total_tokens":7886,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":19},"cost":{"usd":0.00128918,"hypercredits":0.0257836},"remaining":{"hypercredits":0}}}
138+ data: {"id":"chatcmpl-cc0c9ef25b702fedc808d605","object":"chat.completion.chunk","created":1782413796,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":689,"completion_tokens":63,"total_tokens":8231,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":18},"cost":{"usd":0.001321,"hypercredits":0.026419999999999996},"remaining":{"hypercredits":0}}}
141
139
142 data: [DONE]
140 data: [DONE]
143
141
@@ -146,7 +144,7 @@ interactions:
146 - text/event-stream
144 - text/event-stream
147 status: 200 OK
145 status: 200 OK
148 code: 200
146 code: 200
149− duration: 638.4435ms
147+ duration: 936.027666ms
150- id: 1
148- id: 1
151 request:
149 request:
152 proto: HTTP/1.1
150 proto: HTTP/1.1
@@ -171,567 +169,207 @@ interactions:
171 content_length: -1
169 content_length: -1
172 uncompressed: true
170 uncompressed: true
173 body: |+
171 body: |+
174− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"download"},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
201−
202− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" https"},"finish_reason":null}]}
203−
204− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"://"},"finish_reason":null}]}
205−
206− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"..."},"finish_reason":null}]}
207−
208− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
209−
210− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
211−
212− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
213−
214− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
215−
216− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
217−
218− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
219−
220− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
221−
222− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
223−
224− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
225−
226− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
227−
228− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
229−
230− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
231−
232− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
233−
234− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
235−
236− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
249−
250− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
251−
252− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
253−
254− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
255−
256− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
257−
258− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
259−
260− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
261−
262− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
263−
264− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
265−
266− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
267−
268− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
269−
270− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
271−
272− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
273−
274− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
275−
276− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
277−
278− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
279−
280− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
281−
282− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
283−
284− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
285−
286− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locally"},"finish_reason":null}]}
287−
288− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
289−
290− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
291−
292− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
293−
294− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
295−
296− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
297−
298− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
299−
300− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
301−
302− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
303−
304− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
305−
306− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
307−
308− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
309−
310− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
311−
312− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locally"},"finish_reason":null}]}
313−
314− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
315−
316− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
317−
318− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
319−
320− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
321−
322− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
323−
324− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Download"},"finish_reason":null}]}
325−
326− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
327−
328− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
329−
330− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
331−
332− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
333−
334− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
335−
336− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
337−
338− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
339−
340− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
341−
342− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
343−
344− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
345−
346− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
347−
348− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
349−
350− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
351−
352− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
353−
354− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
355−
356− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
357−
358− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
359−
360− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
361−
362− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
363−
364− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
365−
366− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
367−
368− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
369−
370− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
371−
372− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
373−
374− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
375−
376− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
377−
378− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
379−
380− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
381−
382− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
383−
384− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
385−
386− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
387−
388− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
389−
390− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
391−
392− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
393−
394− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
395−
396− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
397−
398− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
399−
400− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
401−
402− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
403−
404− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
405−
406− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
407−
408− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
409−
410− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
411−
412− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
413−
414− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
415−
416− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
417−
418− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
419−
420− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
421−
422− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
423−
424− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
425−
426− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
427−
428− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
429−
430− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
431−
432− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
433−
434− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
435−
436− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
437−
438− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
439−
440− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
441−
442− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
443−
444− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
445−
446− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
447−
448− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
449−
450− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
451−
452− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
453−
454− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
455−
456− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
457−
458− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
459−
460− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
461−
462− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
463−
464− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
465−
466− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
467−
468− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
469−
470− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locally"},"finish_reason":null}]}
471−
472− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
473−
474− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
475−
476− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
477−
478− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
479−
480− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
481−
482− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
483−
484− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
485−
486− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
487−
488− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
489−
490− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
491−
492− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
493−
494− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
495−
496− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Alternatively"},"finish_reason":null}]}
497−
498− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
499−
500− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
501−
502− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
503−
504− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
505−
506− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
507−
508− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
509−
510− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
511−
512− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
513−
514− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
515−
516− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
517−
518− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
519−
520− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
521−
522− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
523−
524− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
525−
526− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Download"},"finish_reason":null}]}
527−
528− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
529−
530− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
531−
532− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")+"},"finish_reason":null}]}
533−
534− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
535
173
536− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
537
175
538− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
539
177
540− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
541
179
542− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
543
181
544− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
545
183
546− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
547
185
548− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
549
187
550− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
551
189
552− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
553
191
554− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
555
193
556− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
557
195
558− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
559
197
560− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
561
199
562− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
563
201
564− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" download"},"finish_reason":null}]}
565
203
566− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
567
205
568− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
569
207
570− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
571
209
572− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" https"},"finish_reason":null}]}
573
211
574− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"://"},"finish_reason":null}]}
575
213
576− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"example"},"finish_reason":null}]}
577
215
578− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-files"},"finish_reason":null}]}
579
217
580− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".online"},"finish_reason":null}]}
581
219
582− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"-con"},"finish_reason":null}]}
583
221
584− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"vert"},"finish_reason":null}]}
585
223
586− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".com"},"finish_reason":null}]}
587
225
588− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/document"},"finish_reason":null}]}
589
227
590− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/t"},"finish_reason":null}]}
591
229
592− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"xt"},"finish_reason":null}]}
593
231
594− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/example"},"finish_reason":null}]}
595
233
596− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
597
235
598− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
599
237
600− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
601
239
602− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
603
241
604− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
605
243
606− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
607
245
608− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
609
247
610− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
611
249
612− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
613
251
614− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
615
253
616− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
617
255
618− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
619
257
620− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
621
259
622− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
623
261
624− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
625
263
626− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
627
265
628− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
629
267
630− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
631
269
632− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" save"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
633
271
634− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
635
273
636− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
637
275
638− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
639
277
640− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
641
279
642− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
643
281
644− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
645
283
646− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
647
285
648− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
649
287
650− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
651
289
652− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
653
291
654− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" as"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
655
293
656− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
657
295
658− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
659
297
660− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
661
299
662− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
663
301
664− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
665
303
666− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
667
305
668− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Save"},"finish_reason":null}]}
669
307
670− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
671
309
672− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
673
311
674− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
675
313
676− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
677
315
678− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
679
317
680− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
681
319
682− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
683
321
684− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
685
323
686− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
687
325
688− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Download"},"finish_reason":null}]}
689
327
690− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
691
329
692− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" also"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Save"},"finish_reason":null}]}
693
331
694− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
695
333
696− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".txt"},"finish_reason":null}]}
697
335
698− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
699
337
700− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
701
339
702− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
703
341
704− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
705
343
706− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
707
345
708− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Choose"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
709
347
710− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
711
349
712− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
713
351
714− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
715
353
716− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
717
355
718− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
719
357
720− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" URL"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
721
359
722− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Save"},"finish_reason":null}]}
723
361
724− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" save"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
725
363
726− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" as"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
727
365
728− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
729
367
730− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" URL"},"finish_reason":null}]}
731
369
732− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
370+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
733
371
734− data: {"id":"chatcmpl-3f0f8f2b9b05cd8f7a280911","object":"chat.completion.chunk","created":1780069683,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":227,"completion_tokens":288,"total_tokens":515,"completion_tokens_details":{"reasoning_tokens":270},"cost":{"usd":0.00038124,"hypercredits":0.007624799999999999},"remaining":{"hypercredits":0}}}
372+ data: {"id":"chatcmpl-cacd42b690dbfa0c757a15f0","object":"chat.completion.chunk","created":1782413796,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":160,"completion_tokens":108,"total_tokens":336,"prompt_tokens_details":{"cached_tokens":68},"completion_tokens_details":{"reasoning_tokens":103},"cost":{"usd":0.000145462,"hypercredits":0.00290924},"remaining":{"hypercredits":0}}}
735
373
736 data: [DONE]
374 data: [DONE]
737
375
@@ -740,7 +378,7 @@ interactions:
740 - text/event-stream
378 - text/event-stream
741 status: 200 OK
379 status: 200 OK
742 code: 200
380 code: 200
743− duration: 837.561291ms
381+ duration: 1.326897958s
744- id: 2
382- id: 2
745 request:
383 request:
746 proto: HTTP/1.1
384 proto: HTTP/1.1
@@ -786,15 +424,15 @@ interactions:
786 - text/plain; charset=UTF-8
424 - text/plain; charset=UTF-8
787 status: 200 OK
425 status: 200 OK
788 code: 200
426 code: 200
789− duration: 610.98125ms
427+ duration: 893.137459ms
790- id: 3
428- id: 3
791 request:
429 request:
792 proto: HTTP/1.1
430 proto: HTTP/1.1
793 proto_major: 1
431 proto_major: 1
794 proto_minor: 1
432 proto_minor: 1
795− content_length: 34579
433+ content_length: 36247
796 host: ""
434 host: ""
797− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_LiiFGSBspKNdPTWMEMOLRvLr\",\"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_LiiFGSBspKNdPTWMEMOLRvLr\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
435+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/download_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"download the file from https://example-files.online-convert.com/document/txt/example.txt and save it as example.txt\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_4cbf337c01e5b47c\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/download_tool/example.txt\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/document/txt/example.txt\\\"}\",\"name\":\"download\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to download a file from a URL and save it as example.txt.\"},{\"content\":\"Successfully downloaded 2574 bytes to example.txt (Content-Type: text/plain; charset=UTF-8)\",\"tool_call_id\":\"call_4cbf337c01e5b47c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
798 headers:
436 headers:
799 Accept:
437 Accept:
800 - application/json
438 - application/json
@@ -811,29 +449,29 @@ interactions:
811 content_length: -1
449 content_length: -1
812 uncompressed: true
450 uncompressed: true
813 body: |+
451 body: |+
814− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
815
453
816− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Download"},"finish_reason":null}]}
817
455
818− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ed"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ed"},"finish_reason":null}]}
819
457
820− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
821
459
822− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" saved"},"finish_reason":null}]}
823
461
824− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" as"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" as"},"finish_reason":null}]}
825
463
826− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
827
465
828− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
829
467
830− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".txt"},"finish_reason":null}]}
831
469
832− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
833
471
834− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
472+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
835
473
836− data: {"id":"chatcmpl-a709ede8c6d38d00517c62ad","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":86,"completion_tokens":11,"total_tokens":7905,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00015886,"hypercredits":0.0031772},"remaining":{"hypercredits":0}}}
474+ data: {"id":"chatcmpl-4bda680be45220e2a1b071f0","object":"chat.completion.chunk","created":1782413799,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":73,"completion_tokens":11,"total_tokens":8251,"prompt_tokens_details":{"cached_tokens":8167},"cost":{"usd":0.0001506,"hypercredits":0.003012},"remaining":{"hypercredits":0}}}
837
475
838 data: [DONE]
476 data: [DONE]
839
477
@@ -842,4 +480,4 @@ interactions:
842 - text/event-stream
480 - text/event-stream
843 status: 200 OK
481 status: 200 OK
844 code: 200
482 code: 200
845− duration: 562.899125ms
483+ duration: 1.486211917s
internal/agent/testdata/TestCoderAgent/glm-5.1/fetch_tool.yaml+304−252
@@ -6,9 +6,9 @@ interactions:
6 proto: HTTP/1.1
6 proto: HTTP/1.1
7 proto_major: 1
7 proto_major: 1
8 proto_minor: 1
8 proto_minor: 1
9− content_length: 895
9+ content_length: 35715
10 host: ""
10 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\nfetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word ''John Doe''\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 THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"fetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word 'John Doe'\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,431 +25,483 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
49
49
50− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
51
51
52− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" check"},"finish_reason":null}]}
53
53
54− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
55
55
56− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
57
57
58− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
59
59
60− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
61
61
62− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
63
63
64− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
65
65
66− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
67
67
68− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Not"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
69
69
70− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
71
71
72− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_60557666b1c79950","type":"function","index":0,"function":{"name":"fetch","arguments":""}}]},"finish_reason":null}]}
73
73
74− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"format\": \""}}]},"finish_reason":null}]}
75
75
76− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"text"}}]},"finish_reason":null}]}
77
77
78− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
79
79
80− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"url\": \""}}]},"finish_reason":null}]}
81
81
82− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"https"}}]},"finish_reason":null}]}
83
83
84− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"://"}}]},"finish_reason":null}]}
85
85
86− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"example"}}]},"finish_reason":null}]}
87
87
88− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
89
89
90− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
91
91
92− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
93
93
94− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert"}}]},"finish_reason":null}]}
95
95
96− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"finish_reason":null}]}
97
97
98− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
99
99
100− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"website"}}]},"finish_reason":null}]}
101
101
102− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/html"}}]},"finish_reason":null}]}
103
103
104− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
105
105
106− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".html"}}]},"finish_reason":null}]}
107
107
108− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
109
109
110− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
111
111
112− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
113
113
114− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fits"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-adf239d098d5e63d542c1773","object":"chat.completion.chunk","created":1782413801,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":696,"completion_tokens":50,"total_tokens":8225,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":23},"cost":{"usd":0.0012956,"hypercredits":0.025912},"remaining":{"hypercredits":0}}}
115
115
116− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
116+ data: [DONE]
117
117
118+ headers:
119+ Content-Type:
120+ - text/event-stream
121+ status: 200 OK
122+ code: 200
123+ duration: 2.230852292s
124+- id: 1
125+ request:
126+ proto: HTTP/1.1
127+ proto_major: 1
128+ proto_minor: 1
129+ content_length: 895
130+ host: ""
131+ 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\nfetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word ''John Doe''\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
132+ headers:
133+ Accept:
134+ - application/json
135+ Content-Type:
136+ - application/json
137+ User-Agent:
138+ - Charm-Crush/devel (https://charm.land/crush)
139+ url: https://hyper.charm.land/v1/chat/completions
140+ method: POST
141+ response:
142+ proto: HTTP/2.0
143+ proto_major: 2
144+ proto_minor: 0
145+ content_length: -1
146+ uncompressed: true
147+ body: |+
118− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Ensure"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
119
149
120− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
121
151
122− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
123
153
124− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
125
155
126− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
127
157
128− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
129
159
130− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" their"},"finish_reason":null}]}
131
161
132− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
133
163
134− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
135
165
136− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
137
167
138− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
139
169
140− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
141
171
142− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
143
173
144− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
145
175
146− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
147
177
148− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
149
179
150− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
151
181
152− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'\""},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
153
183
154− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
155
185
156− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
157
187
158− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
159
189
160− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
161
191
162− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
163
193
164− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
165
195
166− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
167
197
168− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
169
199
170− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
171
201
172− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
173
203
174− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
175
205
176− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
177
207
178− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
179
209
180− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
181
211
182− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
183
213
184− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
185
215
186− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"if"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
187
217
188− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
189
219
190− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" craft"},"finish_reason":null}]}
191
221
192− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
193
223
194− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
195
225
196− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
197
227
198− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
199
229
200− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
201
231
202− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
203
233
204− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
205
235
206− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
207
237
208− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"example"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
209
239
210− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
211
241
212− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
213
243
214− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
215
245
216− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
217
247
218− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
219
249
220− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
221
251
222− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
223
253
224− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
225
255
226− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
227
257
228− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Check"},"finish_reason":null}]}
229
259
230− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
231
261
232− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"contains"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" example"},"finish_reason":null}]}
233
263
234− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".html"},"finish_reason":null}]}
235
265
236− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
237
267
238− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
239
269
240− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
241
271
242− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
243
273
244− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'\""},"finish_reason":null}]}
245
275
246− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that's"},"finish_reason":null}]}
247
277
248− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
249
279
250− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
251
281
252− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \"'"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
253
283
254− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
255
285
256− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
257
287
258− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
259
289
260− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
261
291
262− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
263
293
264− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
265
295
266− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
267
297
268− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
269
299
270− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
271
301
272− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
273
303
274− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
275
305
276− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
277
307
278− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"c"},"finish_reason":null}]}
279
309
280− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Doe"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
281
311
282− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'\""},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"k"},"finish_reason":null}]}
283
313
284− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
285
315
286− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
287
317
288− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
289
319
290− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
291
321
292− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Total"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
293
323
294− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"f"},"finish_reason":null}]}
295
325
296− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
297
327
298− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
299
329
300− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
301
331
302− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
303
333
304− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
305
335
306− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"x"},"finish_reason":null}]}
307
337
308− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
309
339
310− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
311
341
312− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
313
343
314− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
315
345
316− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Check"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
317
347
318− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" if"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"p"},"finish_reason":null}]}
319
349
320− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
321
351
322− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".html"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
323
353
324− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
325
355
326− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" John"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
327
357
328− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
329
359
330− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
360+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
331
361
332− data: {"id":"chatcmpl-3b28ebbfe079f5813ad4baba","object":"chat.completion.chunk","created":1780069685,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":232,"completion_tokens":160,"total_tokens":392,"completion_tokens_details":{"reasoning_tokens":144},"cost":{"usd":0.0002272,"hypercredits":0.004543999999999999},"remaining":{"hypercredits":0}}}
362+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
333
363
334− data: [DONE]
364+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
335
365
336− headers:
366+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
337− Content-Type:
367+
338− - text/event-stream
368+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
339− status: 200 OK
369+
340− code: 200
370+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
341− duration: 564.254458ms
371+
342−- id: 1
372+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"m"},"finish_reason":null}]}
343− request:
373+
344− proto: HTTP/1.1
374+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
345− proto_major: 1
375+
346− proto_minor: 1
376+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"l"},"finish_reason":null}]}
347− content_length: 34028
377+
348− host: ""
378+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
349− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
379+
350− headers:
380+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
351− Accept:
381+
352− - application/json
382+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
353− Content-Type:
383+
354− - application/json
384+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
355− User-Agent:
385+
356− - Charm-Crush/devel (https://charm.land/crush)
386+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
357− url: https://hyper.charm.land/v1/chat/completions
387+
358− method: POST
388+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
359− response:
389+
360− proto: HTTP/2.0
390+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
361− proto_major: 2
391+
362− proto_minor: 0
392+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
363− content_length: -1
393+
364− uncompressed: true
394+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
365− body: |+
395+
366− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"t"},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"a"},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
403+
404+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"i"},"finish_reason":null}]}
405+
406+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
407+
408+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
409+
410+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
411+
412+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"s"},"finish_reason":null}]}
413+
414+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
415+
416+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
417+
418+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
367
419
368− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
369
421
370− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
371
423
372− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"J"},"finish_reason":null}]}
373
425
374− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
375
427
376− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
377
429
378− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fetch"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
379
431
380− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"h"},"finish_reason":null}]}
381
433
382− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
383
435
384− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"n"},"finish_reason":null}]}
385
437
386− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" URL"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
387
439
388− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
389
441
390− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" check"},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
391
443
392− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" if"},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"D"},"finish_reason":null}]}
393
445
394− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
395
447
396− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contains"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"o"},"finish_reason":null}]}
397
449
398− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
399
451
400− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"e"},"finish_reason":null}]}
401
453
402− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
403
455
404− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"John"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
405
457
406− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Doe"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
407
459
408− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'."},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
409
461
410− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_2TxDxIRLeDX97ZGITAVav57g","type":"function","index":0,"function":{"name":"fetch","arguments":""}}]},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
411
463
412− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
413
465
414− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
415
467
416− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"format\": "}}]},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
417
469
418− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"text"}}]},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
419
471
420− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", \"url\": "}}]},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
421
473
422− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"https"}}]},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
423
475
424− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"://"}}]},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
425
477
426− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"example"}}]},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
427
479
428− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-files"}}]},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
429
481
430− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".online"}}]},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
431
483
432− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Check"},"finish_reason":null}]}
433
485
434− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"convert"}}]},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" if"},"finish_reason":null}]}
435
487
436− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" example"},"finish_reason":null}]}
437
489
438− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
490+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".html"},"finish_reason":null}]}
439
491
440− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"website"}}]},"finish_reason":null}]}
492+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}]}
441
493
442− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/html"}}]},"finish_reason":null}]}
494+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
443
495
444− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/example"}}]},"finish_reason":null}]}
496+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
445
497
446− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".html"}}]},"finish_reason":null}]}
498+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
447
499
448− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"'"},"finish_reason":null}]}
449
501
450− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
502+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
451
503
452− data: {"id":"chatcmpl-571ae68110255a47c63f8340","object":"chat.completion.chunk","created":1780069685,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":725,"completion_tokens":50,"total_tokens":7879,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":23},"cost":{"usd":0.00125635,"hypercredits":0.025127},"remaining":{"hypercredits":0}}}
504+ data: {"id":"chatcmpl-2422745116026947d8ea8426","object":"chat.completion.chunk","created":1782413800,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":173,"completion_tokens":183,"total_tokens":420,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.00013191,"hypercredits":0.0026382},"remaining":{"hypercredits":0}}}
453
505
454 data: [DONE]
506 data: [DONE]
455
507
@@ -458,7 +510,7 @@ interactions:
458 - text/event-stream
510 - text/event-stream
459 status: 200 OK
511 status: 200 OK
460 code: 200
512 code: 200
461− duration: 550.064ms
513+ duration: 1.005238292s
462- id: 2
514- id: 2
463 request:
515 request:
464 proto: HTTP/1.1
516 proto: HTTP/1.1
@@ -529,15 +581,15 @@ interactions:
529 - text/html; charset=UTF-8
581 - text/html; charset=UTF-8
530 status: 200 OK
582 status: 200 OK
531 code: 200
583 code: 200
532− duration: 146.217209ms
584+ duration: 147.645375ms
533- id: 3
585- id: 3
534 request:
586 request:
535 proto: HTTP/1.1
587 proto: HTTP/1.1
536 proto_major: 1
588 proto_major: 1
537 proto_minor: 1
589 proto_minor: 1
538− content_length: 34560
590+ content_length: 36231
539 host: ""
591 host: ""
540− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_2TxDxIRLeDX97ZGITAVav57g\",\"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_2TxDxIRLeDX97ZGITAVav57g\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
592+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/fetch_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"fetch the content from https://example-files.online-convert.com/website/html/example.html and tell me if it contains the word 'John Doe'\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_60557666b1c79950\",\"function\":{\"arguments\":\"{\\\"format\\\": \\\"text\\\", \\\"url\\\": \\\"https://example-files.online-convert.com/website/html/example.html\\\"}\",\"name\":\"fetch\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to fetch content from a URL and check if it contains the word 'John Doe'.\"},{\"content\":\"HTML test file Purpose: Provide example of this file type Document file type: HTML Version: 1.0 Remark:\",\"tool_call_id\":\"call_60557666b1c79950\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
541 headers:
593 headers:
542 Accept:
594 Accept:
543 - application/json
595 - application/json
@@ -554,39 +606,39 @@ interactions:
554 content_length: -1
606 content_length: -1
555 uncompressed: true
607 uncompressed: true
556 body: |+
608 body: |+
557− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
609+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
558
610
559− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"No"},"finish_reason":null}]}
611+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"No"},"finish_reason":null}]}
560
612
561− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
613+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
562
614
563− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
615+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
564
616
565− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" fetched"},"finish_reason":null}]}
617+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" fetched"},"finish_reason":null}]}
566
618
567− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
619+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
568
620
569− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" does"},"finish_reason":null}]}
621+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" does"},"finish_reason":null}]}
570
622
571− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" not"},"finish_reason":null}]}
623+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" not"},"finish_reason":null}]}
572
624
573− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contain"},"finish_reason":null}]}
625+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contain"},"finish_reason":null}]}
574
626
575− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
627+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
576
628
577− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" word"},"finish_reason":null}]}
629+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" word"},"finish_reason":null}]}
578
630
579− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" \""},"finish_reason":null}]}
631+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" \""},"finish_reason":null}]}
580
632
581− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
633+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"John"},"finish_reason":null}]}
582
634
583− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
635+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Doe"},"finish_reason":null}]}
584
636
585− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\"."},"finish_reason":null}]}
637+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\"."},"finish_reason":null}]}
586
638
587− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
639+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
588
640
589− data: {"id":"chatcmpl-6818662871afdceed8cba80a","object":"chat.completion.chunk","created":1780069689,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":78,"completion_tokens":16,"total_tokens":7902,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00016938,"hypercredits":0.0033876},"remaining":{"hypercredits":0}}}
641+ data: {"id":"chatcmpl-cd7a3a1eb813288fd5e12324","object":"chat.completion.chunk","created":1782413803,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":753,"completion_tokens":16,"total_tokens":8248,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0011246000000000001,"hypercredits":0.022492},"remaining":{"hypercredits":0}}}
590
642
591 data: [DONE]
643 data: [DONE]
592
644
@@ -595,4 +647,4 @@ interactions:
595 - text/event-stream
647 - text/event-stream
596 status: 200 OK
648 status: 200 OK
597 code: 200
649 code: 200
598− duration: 2.6751105s
650+ duration: 977.248916ms
internal/agent/testdata/TestCoderAgent/glm-5.1/glob_tool.yaml+355−423
@@ -6,9 +6,9 @@ interactions:
6 proto: HTTP/1.1
6 proto: HTTP/1.1
7 proto_major: 1
7 proto_major: 1
8 proto_minor: 1
8 proto_minor: 1
9− content_length: 33946
9+ content_length: 35633
10 host: ""
10 host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
11+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files in the current directory\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,65 +25,87 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_ad74b69d4b477328","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \""}}]},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"**"}}]},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/*."}}]},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
45
45
46− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-680977ab8e48dc961b5a65b4","object":"chat.completion.chunk","created":1782413805,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":679,"completion_tokens":13,"total_tokens":8171,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010077999999999999,"hypercredits":0.020155999999999997},"remaining":{"hypercredits":0}}}
47
47
48− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
48+ data: [DONE]
49−
50− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
51−
52− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
53−
54− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
55−
56− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
57
49
58− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
50+ headers:
51+ Content-Type:
52+ - text/event-stream
53+ status: 200 OK
54+ code: 200
55+ duration: 2.191829958s
56+- id: 1
57+ request:
58+ proto: HTTP/1.1
59+ proto_major: 1
60+ proto_minor: 1
61+ content_length: 35910
62+ host: ""
63+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files in the current directory\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_ad74b69d4b477328\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool/main.go\",\"tool_call_id\":\"call_ad74b69d4b477328\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
64+ headers:
65+ Accept:
66+ - application/json
67+ Content-Type:
68+ - application/json
69+ User-Agent:
70+ - Charm-Crush/devel (https://charm.land/crush)
71+ url: https://hyper.charm.land/v1/chat/completions
72+ method: POST
73+ response:
74+ proto: HTTP/2.0
75+ proto_major: 2
76+ proto_minor: 0
77+ content_length: -1
78+ uncompressed: true
79+ body: |+
80+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
59
81
60− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
61
83
62− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
63
85
64− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
65
87
66− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
67
89
68− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_fl8kSELeCV44nzdl56WTZKve","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
69
91
70− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
71
93
72− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
73
95
74− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
75
97
76− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"**"}}]},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
77
99
78− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/*."}}]},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
79
101
80− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
81
103
82− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
83
105
84− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
106+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
85
107
86− data: {"id":"chatcmpl-a80e274f5ef31a4f7f4a0757","object":"chat.completion.chunk","created":1780069690,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":708,"completion_tokens":32,"total_tokens":7844,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":22},"cost":{"usd":0.0011542800000000001,"hypercredits":0.0230856},"remaining":{"hypercredits":0}}}
108+ data: {"id":"chatcmpl-85e120b7a3fdf21599aee1ba","object":"chat.completion.chunk","created":1782413807,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":36,"completion_tokens":14,"total_tokens":8207,"prompt_tokens_details":{"cached_tokens":8157},"cost":{"usd":0.00011200000000000001,"hypercredits":0.0022400000000000002},"remaining":{"hypercredits":0}}}
87
109
88 data: [DONE]
110 data: [DONE]
89
111
@@ -92,8 +114,8 @@ interactions:
92 - text/event-stream
114 - text/event-stream
93 status: 200 OK
115 status: 200 OK
94 code: 200
116 code: 200
95− duration: 625.636708ms
117+ duration: 1.449032542s
96−- id: 1
118+- id: 2
97 request:
119 request:
98 proto: HTTP/1.1
120 proto: HTTP/1.1
99 proto_major: 1
121 proto_major: 1
@@ -117,683 +139,593 @@ interactions:
117 content_length: -1
139 content_length: -1
118 uncompressed: true
140 uncompressed: true
119 body: |+
141 body: |+
120− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
121−
122− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
123−
124− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
125−
126− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
127−
128− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
129−
130− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
131−
132− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
133−
134− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
135−
136− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
137−
138− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
139−
140− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
141−
142− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
143−
144− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
145
143
146− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
147
145
148− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
149
147
150− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
151
149
152− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
153
151
154− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
155
153
156− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
157
155
158− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
159
157
160− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
161
159
162− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
163
161
164− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
165
163
166− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
167
165
168− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
169
167
170− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
171
169
172− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
173
171
174− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
175
173
176− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
177
175
178− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
179
177
180− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
181
179
182− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
183
181
184− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
185
183
186− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
187
185
188− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
189
187
190− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
191
189
192− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
193
191
194− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
195
193
196− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
197
195
198− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
199
197
200− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
201
199
202− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
203
201
204− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
205
203
206− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
207
205
208− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
209
207
210− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
211
209
212− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
213
211
214− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
215
213
216− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
217
215
218− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
219
217
220− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
221
219
222− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
223
221
224− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
225
223
226− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
227
225
228− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
229
227
230− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
231
229
232− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Finding"},"finish_reason":null}]}
233
231
234− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
235
233
236− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
237
235
238− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
239
237
240− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
241
239
242− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Glob"},"finish_reason":null}]}
243
241
244− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
245
243
246− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Current"},"finish_reason":null}]}
247
245
248− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Directory"},"finish_reason":null}]}
249
247
250− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
251
249
252− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
253
251
254− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
255
253
256− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
257
255
258− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
259
257
260− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
261
259
262− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
263
261
264− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
265
263
266− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
267
265
268− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
269
267
270− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Finding"},"finish_reason":null}]}
271
269
272− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
273
271
274− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
275
273
276− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
277
275
278− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
279
277
280− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Glob"},"finish_reason":null}]}
281
279
282− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
283
281
284− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Current"},"finish_reason":null}]}
285
283
286− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Directory"},"finish_reason":null}]}
287
285
288− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
289
287
290− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
291
289
292− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Using"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
293
291
294− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
295
293
296− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
297
295
298− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Finding"},"finish_reason":null}]}
299
297
300− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
301
299
302− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
303
301
304− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
305
303
306− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
307
305
308− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
309
307
310− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
311
309
312− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
313
311
314− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
315
313
316− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
317
315
318− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
319
317
320− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
321
319
322− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
323
321
324− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
325
323
326− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
327
325
328− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
329
327
330− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
331
329
332− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
333
331
334− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
335
333
336− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
337
335
338− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
339
337
340− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
341
339
342− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
343
341
344− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
345
343
346− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
347
345
348− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
349
347
350− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
351
349
352− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
353
351
354− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
355
353
356− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
357
355
358− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
359
357
360− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
361
359
362− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
363
361
364− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
365
363
366− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
367
365
368− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
369
367
370− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
371
369
372− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
373
371
374− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
375
373
376− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
377
375
378− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
379
377
380− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
381
379
382− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
383
381
384− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
385
383
386− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
387
385
388− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
389
387
390− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Glob"},"finish_reason":null}]}
391
389
392− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
393
391
394− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
395
393
396− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
397
395
398− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
399
397
400− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
401
399
402− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
403
401
404− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
405
403
406− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
407
405
408− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
409
407
410− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
411
409
412− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
413
411
414− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
415
413
416− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
417
415
418− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
419
417
420− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
421
419
422− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
423
421
424− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
425
423
426− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
427
425
428− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
429
427
430− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Current"},"finish_reason":null}]}
431
429
432− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
433
431
434− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
435
433
436− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
437
435
438− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
439
437
440− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
441
439
442− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
443
441
444− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
445
443
446− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
447
445
448− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
449
447
450− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Directory"},"finish_reason":null}]}
451
449
452− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
453
451
454− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
455
453
456− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
457
455
458− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
459
457
460− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
461
459
462− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
463
461
464− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
465
463
466− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
467
465
468− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
469
467
470− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
471
469
472− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
473
471
474− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
475
473
476− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Or"},"finish_reason":null}]}
477
475
478− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" too"},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
479
477
480− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" many"},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Use"},"finish_reason":null}]}
481
479
482− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
483
481
484− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
485
483
486− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
487
485
488− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
489
487
490− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
491
489
492− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Could"},"finish_reason":null}]}
490+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
493
491
494− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" shorten"},"finish_reason":null}]}
492+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
495
493
496− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
494+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
497
495
498− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
496+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" dir"},"finish_reason":null}]}
499
497
500− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Glob"},"finish_reason":null}]}
498+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
501
499
502− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
503
501
504− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
502+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
505
503
506− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
507
505
508− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
506+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Use"},"finish_reason":null}]}
509
507
510− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
511
509
512− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
510+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
513
511
514− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")+"},"finish_reason":null}]}
515
513
516− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
517
515
518− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
519
517
520− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
518+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
521
519
522− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
523
521
524− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
522+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
525
523
526− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Glob"},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
527
525
528− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
529
527
530− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
531
529
532− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
530+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
533
531
534− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
535
533
536− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
537
535
538− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
536+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
539
537
540− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
538+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
541
539
542− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
540+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
543
541
544− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
542+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
545
543
546− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"to"},"finish_reason":null}]}
544+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
547
545
548− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
546+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
549
547
550− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
548+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
551
549
552− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
553
551
554− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
552+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
555
553
556− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
554+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
557
555
558− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
556+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
559
557
560− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
558+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
561
559
562− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
560+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
563
561
564− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
562+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" locate"},"finish_reason":null}]}
565
563
566− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
564+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
567
565
568− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"find"},"finish_reason":null}]}
566+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
569
567
570− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
568+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
571
569
572− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
570+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
573
571
574− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
572+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
575
573
576− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
574+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
577
575
578− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
576+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
579
577
580− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
578+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
581
579
582− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
580+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
583
581
584− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
582+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
585
583
586− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
584+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
587
585
588− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \"."},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
589
587
590− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
588+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
591
589
592− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
590+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
593
591
594− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
592+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
595
593
596− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
594+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
597
595
598− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
596+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
599
597
600− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
601
599
602− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
603
601
604− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
605
603
606− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
607
605
608− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
609
607
610− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
611
609
612− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"files"},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
613
611
614− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
615
613
616− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
617
615
618− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
619
617
620− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
621
619
622− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
623
621
624− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
625
623
626− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
627
625
628− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
629
627
630− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
631
629
632− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
633
631
634− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"in"},"finish_reason":null}]}
632+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
635
633
636− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
637
635
638− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
636+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
639
637
640− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
638+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
641
639
642− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
643
641
644− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
642+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
645
643
646− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
644+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
647
645
648− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
646+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
649
647
650− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
648+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
651
649
652− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
653
651
654− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
652+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
655
653
656− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"current"},"finish_reason":null}]}
654+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
657
655
658− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
656+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
659
657
660− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
658+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
661
659
662− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
660+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
663
661
664− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
662+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
665
663
666− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
664+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" dir"},"finish_reason":null}]}
667
665
668− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
666+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
669
667
670− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
668+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
671
669
672− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
670+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
673
671
674− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
672+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
675
673
676− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
674+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
677
675
678− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"directory"},"finish_reason":null}]}
676+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
679
677
680− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
678+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
681
679
682− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
680+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
683
681
684− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")="},"finish_reason":null}]}
682+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
685
683
686− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
684+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Both"},"finish_reason":null}]}
687
685
688− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
686+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
689
687
690− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
688+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
691
689
692− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
690+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
693
691
694− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
692+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
695
693
696− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
694+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
697
695
698− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
696+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
699
697
700− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
698+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
701
699
702− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
700+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
703−
704− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
705−
706− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
707−
708− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
709−
710− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
711−
712− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
713−
714− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Glob"},"finish_reason":null}]}
715−
716− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
717−
718− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" find"},"finish_reason":null}]}
719−
720− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
721−
722− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
723−
724− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
725−
726− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
727−
728− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
729−
730− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
731−
732− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
733−
734− data: {"id":"chatcmpl-72988fc242d434382e1cef89","object":"chat.completion.chunk","created":1780069690,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":216,"completion_tokens":315,"total_tokens":531,"completion_tokens_details":{"reasoning_tokens":297},"cost":{"usd":0.0004122,"hypercredits":0.008244},"remaining":{"hypercredits":0}}}
735−
736− data: [DONE]
737−
738− headers:
739− Content-Type:
740− - text/event-stream
741− status: 200 OK
742− code: 200
743− duration: 428.407833ms
744−- id: 2
745− request:
746− proto: HTTP/1.1
747− proto_major: 1
748− proto_minor: 1
749− content_length: 34347
750− host: ""
751− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_fl8kSELeCV44nzdl56WTZKve\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to find all .go files in the current directory using the glob tool.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/glob_tool/main.go\",\"tool_call_id\":\"call_fl8kSELeCV44nzdl56WTZKve\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
752− headers:
753− Accept:
754− - application/json
755− Content-Type:
756− - application/json
757− User-Agent:
758− - Charm-Crush/devel (https://charm.land/crush)
759− url: https://hyper.charm.land/v1/chat/completions
760− method: POST
761− response:
762− proto: HTTP/2.0
763− proto_major: 2
764− proto_minor: 0
765− content_length: -1
766− uncompressed: true
767− body: |+
768− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
769
701
770− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
702+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
771
703
772− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
704+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
773
705
774− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
706+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Use"},"finish_reason":null}]}
775
707
776− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
708+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
777
709
778− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
710+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
779
711
780− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
712+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" locate"},"finish_reason":null}]}
781
713
782− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
714+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
783
715
784− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
716+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
785
717
786− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
718+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
787
719
788− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
720+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
789
721
790− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
722+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
791
723
792− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
724+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
793
725
794− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
726+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
795
727
796− data: {"id":"chatcmpl-6fcea68a19fb7f5d4edd2860","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":39,"completion_tokens":14,"total_tokens":7861,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00010989,"hypercredits":0.0021978},"remaining":{"hypercredits":0}}}
728+ data: {"id":"chatcmpl-eb1b020a610e9fa7da88e894","object":"chat.completion.chunk","created":1782413804,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":157,"completion_tokens":298,"total_tokens":519,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.00019385200000000003,"hypercredits":0.0038770400000000004},"remaining":{"hypercredits":0}}}
797
729
798 data: [DONE]
730 data: [DONE]
799
731
@@ -802,4 +734,4 @@ interactions:
802 - text/event-stream
734 - text/event-stream
803 status: 200 OK
735 status: 200 OK
804 code: 200
736 code: 200
805− duration: 619.939042ms
737+ duration: 648.718041ms
internal/agent/testdata/TestCoderAgent/glm-5.1/grep_tool.yaml+304−150
@@ -6,9 +6,9 @@ interactions:
6 proto: HTTP/1.1
6 proto: HTTP/1.1
7 proto_major: 1
7 proto_major: 1
8 proto_minor: 1
8 proto_minor: 1
9− content_length: 33944
9+ content_length: 35631
10 host: ""
10 host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
11+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use grep to search for the word 'package' in go files\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,67 +25,29 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_a57bfe141bf85225","type":"function","index":0,"function":{"name":"grep","arguments":""}}]},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"include\": \""}}]},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"*."}}]},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"pattern\": \""}}]},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"package"}}]},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
49
49
50− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
51−
52− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
53−
54− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
55−
56− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
57−
58− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
59−
60− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
61−
62− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
63−
64− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
65−
66− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
67−
68− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_21rwHdFtgIHBF2shcwEBHHd0","type":"function","index":0,"function":{"name":"grep","arguments":""}}]},"finish_reason":null}]}
69−
70− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
71−
72− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
73−
74− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
75−
76− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"package"}}]},"finish_reason":null}]}
77−
78− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", \"include\": "}}]},"finish_reason":null}]}
79−
80− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"*."}}]},"finish_reason":null}]}
81−
82− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
83−
84− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
85−
86− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
87−
88− data: {"id":"chatcmpl-0798a581811662a07d1abc32","object":"chat.completion.chunk","created":1780069691,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":709,"completion_tokens":37,"total_tokens":7850,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":20},"cost":{"usd":0.0011681900000000002,"hypercredits":0.0233638},"remaining":{"hypercredits":0}}}
50+ data: {"id":"chatcmpl-8110189342807f502f916f95","object":"chat.completion.chunk","created":1782413815,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":680,"completion_tokens":18,"total_tokens":8177,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010312,"hypercredits":0.020623999999999997},"remaining":{"hypercredits":0}}}
89
51
90 data: [DONE]
52 data: [DONE]
91
53
@@ -94,7 +56,7 @@ interactions:
94 - text/event-stream
56 - text/event-stream
95 status: 200 OK
57 status: 200 OK
96 code: 200
58 code: 200
97− duration: 530.110208ms
59+ duration: 1.505379s
98- id: 1
60- id: 1
99 request:
61 request:
100 proto: HTTP/1.1
62 proto: HTTP/1.1
@@ -119,151 +81,345 @@ interactions:
119 content_length: -1
81 content_length: -1
120 uncompressed: true
82 uncompressed: true
121 body: |+
83 body: |+
122− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
85+
86+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
87+
88+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
89+
90+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
91+
92+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
93+
94+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
95+
96+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
97+
98+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
99+
100+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" They"},"finish_reason":null}]}
101+
102+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" gave"},"finish_reason":null}]}
103+
104+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
105+
106+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" phrase"},"finish_reason":null}]}
107+
108+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
109+
110+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
111+
112+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
113+
114+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
115+
116+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
117+
118+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
119+
120+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
121+
122+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
123+
124+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
125+
126+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
127+
128+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
129+
130+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
131+
132+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
133+
134+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
135+
136+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
137+
138+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
139+
140+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
141+
142+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
143+
144+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
145+
146+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
147+
148+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
149+
150+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
151+
152+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
153+
154+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
155+
156+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
157+
158+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
159+
160+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
161+
162+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
163+
164+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
123
165
124− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"User"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
125
167
126− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
127
169
128− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
129
171
130− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
131
173
132− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
133
175
134− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
135
177
136− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
137
179
138− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
139
181
140− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
141
183
142− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
143
185
144− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"G"},"finish_reason":null}]}
145
187
146− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" grep"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"rep"},"finish_reason":null}]}
147
189
148− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
149
191
150− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
151
193
152− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
153
195
154− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
155
197
156− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" word"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
157
199
158− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
159
201
160− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
161
203
162− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
163
205
164− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
165
207
166− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
167
209
168− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" limit"},"finish_reason":null}]}
169
211
170− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
171
213
172− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
173
215
174− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
175
217
176− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
177
219
178− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
179
221
180− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
181
223
182− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
183
225
184− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
185
227
186− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"G"},"finish_reason":null}]}
187
229
188− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"rep"},"finish_reason":null}]}
189
231
190− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
191
233
192− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
193
235
194− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
195
237
196− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
197
239
198− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
199
241
200− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
201
243
202− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
203
245
204− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
205
247
206− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
207
249
208− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
209
251
210− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
211
253
212− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
213
255
214− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"G"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
215
257
216− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"rep"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
217
259
218− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
219
261
220− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
221
263
222− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"package"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
223
265
224− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
225
267
226− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
227
269
228− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
229
271
230− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
231
273
232− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
233
275
234− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
235
277
236− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
237
279
238− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
239
281
240− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
241
283
242− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
243
285
244− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
245
287
246− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
247
289
248− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
249
291
250− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
251
293
252− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"rep"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
253
295
254− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
255
297
256− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" package"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
257
299
258− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
259
301
260− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
261
303
262− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
263
305
264− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
306+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
265
307
308+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
309+
310+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
311+
312+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" k"},"finish_reason":null}]}
313+
314+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
315+
316+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
317+
318+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
319+
320+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
321+
322+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
323+
324+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
325+
326+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
327+
328+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
329+
330+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
331+
332+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
333+
334+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
335+
336+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
337+
338+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
339+
340+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
341+
342+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
343+
344+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
345+
346+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
347+
348+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
349+
350+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
351+
352+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
353+
354+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
355+
356+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
357+
358+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
359+
360+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
361+
362+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
363+
364+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
365+
366+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
367+
368+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
369+
370+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
371+
372+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
373+
374+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
375+
376+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
377+
378+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
379+
380+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
381+
382+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
383+
384+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
385+
386+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
387+
388+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
389+
390+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
391+
392+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
393+
394+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
395+
396+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Provide"},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
403+
404+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
405+
406+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
407+
408+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"rep"},"finish_reason":null}]}
409+
410+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
411+
412+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" '"},"finish_reason":null}]}
413+
414+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
415+
416+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"'"},"finish_reason":null}]}
417+
418+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
419+
420+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
421+
266− data: {"id":"chatcmpl-d9dfa682ad16493bb43839d1","object":"chat.completion.chunk","created":1780069692,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":217,"completion_tokens":80,"total_tokens":297,"completion_tokens_details":{"reasoning_tokens":64},"cost":{"usd":0.0001269,"hypercredits":0.002538},"remaining":{"hypercredits":0}}}
422+ data: {"id":"chatcmpl-249484b499306e8f4f6345cf","object":"chat.completion.chunk","created":1782413814,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":201,"completion_tokens":179,"total_tokens":380,"completion_tokens_details":{"reasoning_tokens":129},"cost":{"usd":0.00020686400000000002,"hypercredits":0.00413728},"remaining":{"hypercredits":0}}}
267
423
268 data: [DONE]
424 data: [DONE]
269
425
@@ -272,15 +428,15 @@ interactions:
272 - text/event-stream
428 - text/event-stream
273 status: 200 OK
429 status: 200 OK
274 code: 200
430 code: 200
275− duration: 910.652042ms
431+ duration: 541.974834ms
276- id: 2
432- id: 2
277 request:
433 request:
278 proto: HTTP/1.1
434 proto: HTTP/1.1
279 proto_major: 1
435 proto_major: 1
280 proto_minor: 1
436 proto_minor: 1
281− content_length: 34415
437+ content_length: 35983
282 host: ""
438 host: ""
283− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_21rwHdFtgIHBF2shcwEBHHd0\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"package\\\", \\\"include\\\": \\\"*.go\\\"}\",\"name\":\"grep\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants 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_21rwHdFtgIHBF2shcwEBHHd0\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
439+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use grep to search for the word 'package' in go files\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_a57bfe141bf85225\",\"function\":{\"arguments\":\"{\\\"include\\\": \\\"*.go\\\", \\\"pattern\\\": \\\"package\\\"}\",\"name\":\"grep\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"Found 1 matches\\n/tmp/crush-test/TestCoderAgent/glm-5.1/grep_tool/main.go:\\n Line 1, Char 1: package main\\n\",\"tool_call_id\":\"call_a57bfe141bf85225\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
284 headers:
440 headers:
285 Accept:
441 Accept:
286 - application/json
442 - application/json
@@ -297,43 +453,41 @@ interactions:
297 content_length: -1
453 content_length: -1
298 uncompressed: true
454 uncompressed: true
299 body: |+
455 body: |+
300− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
301−
302− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
303
457
304− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
305
459
306− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" match"},"finish_reason":null}]}
307
461
308− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" match"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" found"},"finish_reason":null}]}
309
463
310− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
311
465
312− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
313
467
314− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
315
469
316− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
317
471
318− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
319
473
320− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
321
475
322− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
323
477
324− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
325
479
326− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
327
481
328− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"package"},"finish_reason":null}]}
329
483
330− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
331
485
332− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
333
487
334− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
488+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
335
489
336− data: {"id":"chatcmpl-14835ce4b37a296037351a3c","object":"chat.completion.chunk","created":1780069692,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":63,"completion_tokens":18,"total_tokens":7889,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00015813,"hypercredits":0.0031626},"remaining":{"hypercredits":0}}}
490+ data: {"id":"chatcmpl-09dddfb926db7fdea7e49d0d","object":"chat.completion.chunk","created":1782413816,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":59,"completion_tokens":17,"total_tokens":8234,"prompt_tokens_details":{"cached_tokens":8158},"cost":{"usd":0.0001574,"hypercredits":0.0031479999999999998},"remaining":{"hypercredits":0}}}
337
491
338 data: [DONE]
492 data: [DONE]
339
493
@@ -342,4 +496,4 @@ interactions:
342 - text/event-stream
496 - text/event-stream
343 status: 200 OK
497 status: 200 OK
344 code: 200
498 code: 200
345− duration: 525.813667ms
499+ duration: 1.500804s
internal/agent/testdata/TestCoderAgent/glm-5.1/ls_tool.yaml+288−228
@@ -6,9 +6,9 @@ interactions:
6 proto: HTTP/1.1
6 proto: HTTP/1.1
7 proto_major: 1
7 proto_major: 1
8 proto_minor: 1
8 proto_minor: 1
9− content_length: 33938
9+ content_length: 35625
10 host: ""
10 host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
11+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use ls to list the files in the current directory\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,395 +25,455 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_9fc14d4b22da05b9","type":"function","index":0,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{}"}}]},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
35
35
36− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-edc9f684f6145a18378c95dd","object":"chat.completion.chunk","created":1782413818,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":677,"completion_tokens":5,"total_tokens":8161,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0009697999999999999,"hypercredits":0.019395999999999997},"remaining":{"hypercredits":0}}}
37
37
38− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
38+ data: [DONE]
39
39
40+ headers:
41+ Content-Type:
42+ - text/event-stream
43+ status: 200 OK
44+ code: 200
45+ duration: 1.511164s
46+- id: 1
47+ request:
48+ proto: HTTP/1.1
49+ proto_major: 1
50+ proto_minor: 1
51+ content_length: 808
52+ host: ""
53+ 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 ls to list the files in the current directory\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
54+ headers:
55+ Accept:
56+ - application/json
57+ Content-Type:
58+ - application/json
59+ User-Agent:
60+ - Charm-Crush/devel (https://charm.land/crush)
61+ url: https://hyper.charm.land/v1/chat/completions
62+ method: POST
63+ response:
64+ proto: HTTP/2.0
65+ proto_major: 2
66+ proto_minor: 0
67+ content_length: -1
68+ uncompressed: true
69+ body: |+
40− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
41
71
42− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
43
73
44− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
45
75
46− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
47
77
48− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
49
79
50− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
51
81
52− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
53
83
54− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
55
85
56− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
57
87
58− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
59
89
60− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
61
91
62− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_DolI6GDGB8olX8skQ056EtPD","type":"function","index":0,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
63
93
64− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
65
95
66− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
67
97
68− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"depth\": "}}]},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
69
99
70− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
71
101
72− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"path\": "}}]},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
73
103
74− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
75
105
76− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
77
107
78− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
79
109
80− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
81
111
82− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
83
113
84− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
85
115
86− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
87
117
88− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
89
119
90− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
91
121
92− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
93
123
94− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
95
125
96− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
97
127
98− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
99
129
100− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
101
131
102− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ls"}}]},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
103
133
104− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
105
135
106− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
107
137
108− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
138+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
109
139
110− data: {"id":"chatcmpl-164a30f9461a73f5ee098b9c","object":"chat.completion.chunk","created":1780069693,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":706,"completion_tokens":48,"total_tokens":7858,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":19},"cost":{"usd":0.0012062600000000002,"hypercredits":0.024125200000000003},"remaining":{"hypercredits":0}}}
140+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
111
141
112− data: [DONE]
142+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" max"},"finish_reason":null}]}
113
143
114− headers:
144+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
115− Content-Type:
116− - text/event-stream
117− status: 200 OK
118− code: 200
119− duration: 809.482333ms
120−- id: 1
121− request:
122− proto: HTTP/1.1
123− proto_major: 1
124− proto_minor: 1
125− content_length: 34399
126− host: ""
127− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_DolI6GDGB8olX8skQ056EtPD\",\"function\":{\"arguments\":\"{\\\"depth\\\": 1, \\\"path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\\"}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to list files in the current directory using the ls tool.\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"call_DolI6GDGB8olX8skQ056EtPD\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
128− headers:
129− Accept:
130− - application/json
131− Content-Type:
132− - application/json
133− User-Agent:
134− - Charm-Crush/devel (https://charm.land/crush)
135− url: https://hyper.charm.land/v1/chat/completions
136− method: POST
137− response:
138− proto: HTTP/2.0
139− proto_major: 2
140− proto_minor: 0
141− content_length: -1
142− uncompressed: true
143− body: |+
144− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
145
145
146− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
147
147
148− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
149
149
150− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
151
151
152− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
153
153
154− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
155
155
156− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
157
157
158− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
159
159
160− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
161
161
162− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
163
163
164− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
165
165
166− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
166+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
167
167
168− data: {"id":"chatcmpl-2c111a808431f0ffbafc2556","object":"chat.completion.chunk","created":1780069694,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":68,"completion_tokens":12,"total_tokens":7888,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00013947999999999999,"hypercredits":0.0027895999999999997},"remaining":{"hypercredits":0}}}
168+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
169
169
170− data: [DONE]
170+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
171
171
172− headers:
172+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
173− Content-Type:
173+
174− - text/event-stream
174+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
175− status: 200 OK
175+
176− code: 200
176+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"List"},"finish_reason":null}]}
177− duration: 536.859958ms
177+
178−- id: 2
178+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
179− request:
179+
180− proto: HTTP/1.1
180+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
181− proto_major: 1
181+
182− proto_minor: 1
182+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
183− content_length: 808
183+
184− host: ""
184+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
185− 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 ls to list the files in the current directory\n <think>\n\n</think>","role":"user"}],"model":"gpt-oss-120b","max_completion_tokens":40,"stream_options":{"include_usage":true},"stream":true}'
185+
186− headers:
186+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
187− Accept:
187+
188− - application/json
188+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
189− Content-Type:
189+
190− - application/json
190+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
191− User-Agent:
191+
192− - Charm-Crush/devel (https://charm.land/crush)
192+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
193− url: https://hyper.charm.land/v1/chat/completions
193+
194− method: POST
194+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
195− response:
195+
196− proto: HTTP/2.0
196+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
197− proto_major: 2
197+
198− proto_minor: 0
198+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
199− content_length: -1
199+
200− uncompressed: true
200+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
201− body: |+
201+
202+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
203+
204+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
205+
206+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
207+
208+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" List"},"finish_reason":null}]}
209+
210+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
211+
212+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
213+
214+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
215+
202− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
203
217
204− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
205
219
206− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" system"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
207
221
208− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
209
223
210− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
211
225
212− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" developer"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
213
227
214− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
215
229
216− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
217
231
218− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" generate"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
219
233
220− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
221
235
222− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
223
237
224− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" based"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
225
239
226− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" on"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
227
241
228− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
229
243
230− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
231
245
232− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
233
247
234− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
235
249
236− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" begins"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
237
251
238− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
239
253
240− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" conversation"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
241
255
242− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
243
257
244− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
245
259
246− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
247
261
248− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
249
263
250− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
251
265
252− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
253
267
254− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
255
269
256− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
257
271
258− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
259
273
260− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
261
275
262− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
263
277
264− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
265
279
266− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
267
281
268− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
269
283
270− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
271
285
272− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
273
287
274− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
275
289
276− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
277
291
278− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
279
293
280− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
281
295
282− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
283
297
284− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
285
299
286− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
287
301
288− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
289
303
290− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
291
305
292− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
293
307
294− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
295
309
296− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"think"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
297
311
298− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003e\""},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
299
313
300− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" They"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
301
315
302− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" want"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
303
317
304− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
305
319
306− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
307
321
308− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
309
323
310− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
311
325
312− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
313
327
314− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
315
329
316− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
317
331
318− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
319
333
320− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
321
335
322− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
323
337
324− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
325
339
326− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Not"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
327
341
328− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
329
343
330− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
331
345
332− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
333
347
334− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
335
349
336− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
337
351
338− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
339
353
340− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
341
355
342− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summarize"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
343
357
344− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
345
359
346− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
347
361
348− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
349
363
350− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
351
365
352− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
353
367
354− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
355
369
356− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Using"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
357
371
358− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
359
373
360− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
361
375
362− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" List"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
363
377
364− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Current"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" OK"},"finish_reason":null}]}
365
379
366− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Directory"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
367
381
368− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Files"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
369
383
370− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
371
385
372− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
373
387
374− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"List"},"finish_reason":null}]}
375
389
376− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
377
391
378− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
393+
394+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
395+
396+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
403+
404+ data: {"id":"chatcmpl-a1787c3e58fc5f4d633cd7f2","object":"chat.completion.chunk","created":1782413817,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":155,"completion_tokens":172,"total_tokens":391,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.000122704,"hypercredits":0.00245408},"remaining":{"hypercredits":0}}}
405+
406+ data: [DONE]
407+
408+ headers:
409+ Content-Type:
410+ - text/event-stream
411+ status: 200 OK
412+ code: 200
413+ duration: 531.140917ms
414+- id: 2
415+ request:
416+ proto: HTTP/1.1
417+ proto_major: 1
418+ proto_minor: 1
419+ content_length: 35898
420+ host: ""
421+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use ls to list the files in the current directory\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_9fc14d4b22da05b9\",\"function\":{\"arguments\":\"{}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/ls_tool/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"call_9fc14d4b22da05b9\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
422+ headers:
423+ Accept:
424+ - application/json
425+ Content-Type:
426+ - application/json
427+ User-Agent:
428+ - Charm-Crush/devel (https://charm.land/crush)
429+ url: https://hyper.charm.land/v1/chat/completions
430+ method: POST
431+ response:
432+ proto: HTTP/2.0
433+ proto_major: 2
434+ proto_minor: 0
435+ content_length: -1
436+ uncompressed: true
437+ body: |+
438+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
379
439
380− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Two"},"finish_reason":null}]}
381
441
382− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
383
443
384− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
385
445
386− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
387
447
388− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
389
449
390− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
391
451
392− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n"},"finish_reason":null}]}
393
453
394− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
395
455
396− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
397
457
398− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
399
459
400− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Using"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
401
461
402− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
403
463
404− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
405
465
406− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" list"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
407
467
408− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" current"},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
409
469
410− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
411
471
412− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
413
473
414− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
474+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
415
475
416− data: {"id":"chatcmpl-b40bae129980d771e7d96e2c","object":"chat.completion.chunk","created":1780069695,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":214,"completion_tokens":115,"total_tokens":329,"completion_tokens_details":{"reasoning_tokens":99},"cost":{"usd":0.00016906,"hypercredits":0.0033812},"remaining":{"hypercredits":0}}}
476+ data: {"id":"chatcmpl-0df4ed5d1b2533d9447fa033","object":"chat.completion.chunk","created":1782413819,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8195,"completion_tokens":19,"total_tokens":8214,"cost":{"usd":0.0115566,"hypercredits":0.231132},"remaining":{"hypercredits":0}}}
417
477
418 data: [DONE]
478 data: [DONE]
419
479
@@ -422,4 +482,4 @@ interactions:
422 - text/event-stream
482 - text/event-stream
423 status: 200 OK
483 status: 200 OK
424 code: 200
484 code: 200
425− duration: 2.958506667s
485+ duration: 1.065962584s
internal/agent/testdata/TestCoderAgent/glm-5.1/multiedit_tool.yaml+817−497
@@ -6,9 +6,9 @@ interactions:
6 proto: HTTP/1.1
6 proto: HTTP/1.1
7 proto_major: 1
7 proto_major: 1
8 proto_minor: 1
8 proto_minor: 1
9− content_length: 34024
9+ content_length: 35711
10 host: ""
10 host: ""
11− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
11+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12 headers:
12 headers:
13 Accept:
13 Accept:
14 - application/json
14 - application/json
@@ -25,89 +25,83 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" see"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" understand"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
49
49
50− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" contents"},"finish_reason":null}]}
51
51
52− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
53
53
54− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_be8eea5daa27022a","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
55
55
56− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
57
57
58− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_4BvAOulZ4vPbT3o9XRDa7mrF","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
59
59
60− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
61
61
62− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
63
63
64− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
65
65
66− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
67
67
68− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
69
69
70− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
71
71
72− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
73
73
74− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
75
75
76− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
77
77
78− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
79
79
80− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
81
81
82− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
83
83
84− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
85
85
86− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
87
87
88− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
89
89
90− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
91
91
92− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
93
93
94− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
95
95
96− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
97
97
98− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
99
99
100− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
101
101
102− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
103
103
104− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
105−
106− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
107−
108− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
109−
110− data: {"id":"chatcmpl-e99200919451060d099e458c","object":"chat.completion.chunk","created":1780069697,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":731,"completion_tokens":45,"total_tokens":7880,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":18},"cost":{"usd":0.00122221,"hypercredits":0.0244442},"remaining":{"hypercredits":0}}}
104+ data: {"id":"chatcmpl-ca876c009fd6258f6d6f29ea","object":"chat.completion.chunk","created":1782413821,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":702,"completion_tokens":43,"total_tokens":8224,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":14},"cost":{"usd":0.0012336,"hypercredits":0.024672},"remaining":{"hypercredits":0}}}
111
105
112 data: [DONE]
106 data: [DONE]
113
107
@@ -116,7 +110,7 @@ interactions:
116 - text/event-stream
110 - text/event-stream
117 status: 200 OK
111 status: 200 OK
118 code: 200
112 code: 200
119− duration: 620.445917ms
113+ duration: 993.64425ms
120- id: 1
114- id: 1
121 request:
115 request:
122 proto: HTTP/1.1
116 proto: HTTP/1.1
@@ -141,593 +135,747 @@ interactions:
141 content_length: -1
135 content_length: -1
142 uncompressed: true
136 uncompressed: true
143 body: |+
137 body: |+
144− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
139+
140+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
141+
142+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
143+
144+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
145+
146+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
147+
148+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
149+
150+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
151+
152+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
153+
154+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
155+
156+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
157+
158+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
159+
160+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
161+
162+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
163+
164+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
165+
166+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
167+
168+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
169+
170+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mult"},"finish_reason":null}]}
171+
172+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
173+
174+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
175+
176+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
177+
178+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
179+
180+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
181+
182+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
183+
184+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
185+
186+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
187+
188+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"!'"},"finish_reason":null}]}
189+
190+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
191+
192+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
193+
194+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
195+
196+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
197+
198+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
199+
200+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"!'"},"finish_reason":null}]}
201+
202+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
203+
204+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
205+
206+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
207+
208+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
209+
210+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '//"},"finish_reason":null}]}
211+
212+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Greeting"},"finish_reason":null}]}
213+
214+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
215+
216+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" above"},"finish_reason":null}]}
217+
218+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
219+
220+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fmt"},"finish_reason":null}]}
221+
222+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".Println"},"finish_reason":null}]}
223+
224+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
145
225
146− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
147
227
148− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
149
229
150− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
151
231
152− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
153
233
154− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
155
235
156− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
157
237
158− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
159
239
160− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
161
241
162− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
163
243
164− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
165
245
166− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
167
247
168− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
169
249
170− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
171
251
172− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
173
253
174− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
175
255
176− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
177
257
178− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
179
259
180− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
181
261
182− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
183
263
184− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
185
265
186− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
187
267
188− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
189
269
190− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mult"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
191
271
192− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
193
273
194− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
195
275
196− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
197
277
198− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
199
279
200− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
201
281
202− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
203
283
204− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
205
285
206− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
207
287
208− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
209
289
210− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
211
291
212− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
213
293
214− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Edit"},"finish_reason":null}]}
215
295
216− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
217
297
218− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
219
299
220− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
221
301
222− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" update"},"finish_reason":null}]}
223
303
224− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
225
305
226− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
227
307
228− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Mult"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
229
309
230− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
231
311
232− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
233
313
234− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
235
315
236− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
237
317
238− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
239
319
240− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
241
321
242− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
243
323
244− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Edit"},"finish_reason":null}]}
245
325
246− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
247
327
248− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
249
329
250− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
251
331
252− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" update"},"finish_reason":null}]}
253
333
254− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
255
335
256− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Mult"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
257
337
258− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
259
339
260− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
261
341
262− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
263
343
264− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
265
345
266− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
267
347
268− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" E"},"finish_reason":null}]}
269
349
270− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
271
351
272− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
273
353
274− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
275
355
276− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
277
357
278− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
279
359
280− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
281
361
282− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
283
363
284− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
285
365
286− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Mult"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
287
367
288− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
289
369
290− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
291
371
292− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
293
373
294− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
295
375
296− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
297
377
298− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
299
379
300− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
301
381
302− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
303
383
304− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
305
385
306− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
307
387
308− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
309
389
310− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
311
391
312− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
313
393
314− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
315
395
316− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
317
397
318− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
319
399
320− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
321
401
322− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
323
403
324− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
325
405
326− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"change"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
327
407
328− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
329
409
330− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
331
411
332− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
333
413
334− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
335
415
336− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
337
417
338− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
339
419
340− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
341
421
342− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
343
423
344− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
345
425
346− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
347
427
348− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
349
429
350− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
351
431
352− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
353
433
354− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
355
435
356− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
357
437
358− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"g"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
359
439
360− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"reeting"},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
361
441
362− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
363
443
364− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
365
445
366− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
367
447
368− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
369
449
370− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
371
451
372− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
373
453
374− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
375
455
376− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
377
457
378− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
379
459
380− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
381
461
382− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
383
463
384− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
385
465
386− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
387
467
388− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
389
469
390− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"and"},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
391
471
392− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
393
473
394− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
395
475
396− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
397
477
398− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
399
479
400− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
401
481
402− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
403
483
404− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
405
485
406− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
407
487
408− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
409
489
410− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
490+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
411
491
412− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
492+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
413
493
414− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
494+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
415
495
416− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"add"},"finish_reason":null}]}
496+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
417
497
418− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
498+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
419
499
420− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
421
501
422− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
502+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
423
503
424− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
425
505
426− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
506+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
427
507
428− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
429
509
430− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
510+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
431
511
432− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
433
513
434− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
435
515
436− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
437
517
438− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
518+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
439
519
440− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"comment"},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
441
521
442− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"("},"finish_reason":null}]}
522+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
443
523
444− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
445
525
446− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
447
527
448− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
449
529
450− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
530+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
451
531
452− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
453
533
454− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
455
535
456− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
536+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
457
537
458− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
538+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
459
539
460− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
540+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
461
541
462− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
542+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
463
543
464− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
544+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
465
545
466− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
546+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
467
547
468− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
548+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
469
549
470− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
471
551
472− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" It"},"finish_reason":null}]}
552+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
473
553
474− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" says"},"finish_reason":null}]}
554+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
475
555
476− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
556+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Or"},"finish_reason":null}]}
477
557
478− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
558+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
479
559
480− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
560+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Change"},"finish_reason":null}]}
481
561
482− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
562+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
483
563
484− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Actually"},"finish_reason":null}]}
564+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
485
565
486− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" rule"},"finish_reason":null}]}
566+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
487
567
488− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
568+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
489
569
490− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Do"},"finish_reason":null}]}
570+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
491
571
492− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" not"},"finish_reason":null}]}
572+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
493
573
494− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
574+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
495
575
496− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
576+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
497
577
498− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
578+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
499
579
500− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
580+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
501
581
502− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
582+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
503
583
504− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
584+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
505
585
506− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Change"},"finish_reason":null}]}
507
587
508− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" cannot"},"finish_reason":null}]}
588+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
509
589
510− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
590+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
511
591
512− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
592+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
513
593
514− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
594+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
515
595
516− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Remove"},"finish_reason":null}]}
596+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
517
597
518− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
519
599
520− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
521
601
522− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
523
603
524− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
525
605
526− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
527
607
528− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Mult"},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
529
609
530− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
531
611
532− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
533
613
534− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
535
615
536− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
537
617
538− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
539
619
540− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
541
621
542− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
543
623
544− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
545
625
546− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
547
627
548− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
549
629
550− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Mult"},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
551
631
552− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
632+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
553
633
554− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
555
635
556− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
636+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
557
637
558− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
638+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
559
639
560− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" H"},"finish_reason":null}]}
561
641
562− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" +"},"finish_reason":null}]}
642+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
563
643
564− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
644+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
565
645
566− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
646+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
567
647
568− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
648+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
569
649
570− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
571
651
572− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
652+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
573
653
574− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
654+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
575
655
576− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" change"},"finish_reason":null}]}
656+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
577
657
578− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
658+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
579
659
580− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
660+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
581
661
582− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
662+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
583
663
584− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
664+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" W"},"finish_reason":null}]}
585
665
586− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
666+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
587
667
588− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
668+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
589
669
590− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
670+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
591
671
592− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
672+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
593
673
594− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
674+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
595
675
596− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
676+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
597
677
598− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
678+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
599
679
600− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
680+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
601
681
602− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
682+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
603
683
604− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
684+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
605
685
606− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
686+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
607
687
608− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
688+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
609
689
610− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
690+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
611
691
612− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
692+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
613
693
614− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
694+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
615
695
616− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
696+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
617
697
618− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
698+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
619
699
620− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
700+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" H"},"finish_reason":null}]}
621
701
622− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
702+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
623
703
624− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
704+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
625
705
626− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
706+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
627
707
628− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
708+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
629
709
630− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
710+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
631
711
632− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
712+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
633
713
634− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
714+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
635
715
636− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
716+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
637
717
638− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
718+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
639
719
640− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
720+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
641
721
642− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
722+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
643
723
644− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
724+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" C"},"finish_reason":null}]}
645
725
646− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
726+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
647
727
648− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
728+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
649
729
650− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
730+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
651
731
652− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
732+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
653
733
654− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
734+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
655
735
656− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
736+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
657
737
658− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
738+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
659
739
660− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
740+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
661
741
662− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
742+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
663
743
664− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
744+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
665
745
666− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
746+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
667
747
668− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"=\u003e"},"finish_reason":null}]}
748+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
669
749
670− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
750+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
671
751
672− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
752+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
673
753
674− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
754+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
675
755
676− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
756+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
677
757
678− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
758+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
679
759
680− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")=\u003e"},"finish_reason":null}]}
760+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
681
761
682− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
762+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
683
763
684− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
764+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
685
765
686− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
766+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
687
767
688− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
768+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
689
769
690− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
770+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
691
771
692− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
772+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
693
773
694− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
774+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
695
775
696− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
776+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
697
777
698− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
778+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
699
779
700− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
780+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
701
781
702− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
782+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
703
783
704− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
784+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
705
785
706− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
786+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
707
787
708− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
788+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
709
789
710− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
790+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
711
791
712− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Mult"},"finish_reason":null}]}
792+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
713
793
714− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"ied"},"finish_reason":null}]}
794+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
715
795
716− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"it"},"finish_reason":null}]}
796+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
717
797
718− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" change"},"finish_reason":null}]}
798+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
719
799
720− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" greeting"},"finish_reason":null}]}
800+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
721
801
722− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
802+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
723
803
724− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" add"},"finish_reason":null}]}
804+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
725
805
726− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
806+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
727
807
728− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
808+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
729
809
810+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
811+
812+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
813+
814+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
815+
816+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
817+
818+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
819+
820+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" okay"},"finish_reason":null}]}
821+
822+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" too"},"finish_reason":null}]}
823+
824+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
825+
826+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Pick"},"finish_reason":null}]}
827+
828+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
829+
830+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
831+
832+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" I'll"},"finish_reason":null}]}
833+
834+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
835+
836+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
837+
838+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Change"},"finish_reason":null}]}
839+
840+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
841+
842+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
843+
844+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
845+
846+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
847+
848+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
849+
850+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
851+
852+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" add"},"finish_reason":null}]}
853+
854+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" comment"},"finish_reason":null}]}
855+
856+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
857+
858+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Change"},"finish_reason":null}]}
859+
860+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Hello"},"finish_reason":null}]}
861+
862+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" World"},"finish_reason":null}]}
863+
864+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
865+
866+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Hello"},"finish_reason":null}]}
867+
868+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Crush"},"finish_reason":null}]}
869+
870+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
871+
872+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" add"},"finish_reason":null}]}
873+
874+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
875+
876+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
877+
730− data: {"id":"chatcmpl-f0ea2851314350c1bab8d6ee","object":"chat.completion.chunk","created":1780069697,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":236,"completion_tokens":301,"total_tokens":537,"completion_tokens_details":{"reasoning_tokens":284},"cost":{"usd":0.00039933,"hypercredits":0.0079866},"remaining":{"hypercredits":0}}}
878+ data: {"id":"chatcmpl-5e68cd6f73c28edc1e071714","object":"chat.completion.chunk","created":1782413821,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":169,"completion_tokens":378,"total_tokens":615,"prompt_tokens_details":{"cached_tokens":68},"completion_tokens_details":{"reasoning_tokens":296},"cost":{"usd":0.00040718000000000004,"hypercredits":0.0081436},"remaining":{"hypercredits":0}}}
731
879
732 data: [DONE]
880 data: [DONE]
733
881
@@ -736,15 +884,103 @@ interactions:
736 - text/event-stream
884 - text/event-stream
737 status: 200 OK
885 status: 200 OK
738 code: 200
886 code: 200
739− duration: 394.4095ms
887+ duration: 889.289875ms
740- id: 2
888- id: 2
741 request:
889 request:
742 proto: HTTP/1.1
890 proto: HTTP/1.1
743 proto_major: 1
891 proto_major: 1
744 proto_minor: 1
892 proto_minor: 1
745− content_length: 34570
893+ content_length: 36227
894+ host: ""
895+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
896+ headers:
897+ Accept:
898+ - application/json
899+ Content-Type:
900+ - application/json
901+ User-Agent:
902+ - Charm-Crush/devel (https://charm.land/crush)
903+ url: https://hyper.charm.land/v1/chat/completions
904+ method: POST
905+ response:
906+ proto: HTTP/2.0
907+ proto_major: 2
908+ proto_minor: 0
909+ content_length: -1
910+ uncompressed: true
911+ body: |+
912+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
913+
914+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_3cee374c3e013d11","type":"function","index":0,"function":{"name":"multiedit","arguments":""}}]},"finish_reason":null}]}
915+
916+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"edits\": [{\"new_string\": \"Hello, Crush!\", \"old_string\": \"Hello, World!\"}, {\"new_string\": \"\\t// Greeting\\n\\tfmt.Println(\\\"Hello, Crush!\\\")\", \"old_string\": \"\\tfmt.Println(\\\"Hello, World!\\\")\"}]"}}]},"finish_reason":null}]}
917+
918+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"file_path\": \""}}]},"finish_reason":null}]}
919+
920+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
921+
922+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
923+
924+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
925+
926+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
927+
928+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
929+
930+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
931+
932+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
933+
934+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
935+
936+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
937+
938+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
939+
940+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
941+
942+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
943+
944+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
945+
946+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
947+
948+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
949+
950+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
951+
952+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
953+
954+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
955+
956+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
957+
958+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
959+
960+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
961+
962+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
963+
964+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
965+
966+ data: {"id":"chatcmpl-082fdde599edf97bda1a5a47","object":"chat.completion.chunk","created":1782413823,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":793,"completion_tokens":95,"total_tokens":8367,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0015282,"hypercredits":0.030563999999999997},"remaining":{"hypercredits":0}}}
967+
968+ data: [DONE]
969+
970+ headers:
971+ Content-Type:
972+ - text/event-stream
973+ status: 200 OK
974+ code: 200
975+ duration: 950.328ms
976+- id: 3
977+ request:
978+ proto: HTTP/1.1
979+ proto_major: 1
980+ proto_minor: 1
981+ content_length: 36887
746 host: ""
982 host: ""
747− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_4BvAOulZ4vPbT3o9XRDa7mrF\",\"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 understand its current content.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_4BvAOulZ4vPbT3o9XRDa7mrF\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
983+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3cee374c3e013d11\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"Hello, Crush!\\\", \\\"old_string\\\": \\\"Hello, World!\\\"}, {\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 of 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go (1 edit(s) failed)\\n</result>\\n\",\"tool_call_id\":\"call_3cee374c3e013d11\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
748 headers:
984 headers:
749 Accept:
985 Accept:
750 - application/json
986 - application/json
@@ -761,175 +997,261 @@ interactions:
761 content_length: -1
997 content_length: -1
762 uncompressed: true
998 uncompressed: true
763 body: |+
999 body: |+
764− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1000+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1001+
1002+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
765
1003
766− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_aHnPYHta9B2b9HfMoNV5jxjf","type":"function","index":0,"function":{"name":"multiedit","arguments":""}}]},"finish_reason":null}]}
1004+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
767
1005
768− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
1006+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
769
1007
770− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
1008+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" succeeded"},"finish_reason":null}]}
771
1009
772− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"edits\": "}}]},"finish_reason":null}]}
1010+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
773
1011
774− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"["}}]},"finish_reason":null}]}
1012+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"changing"},"finish_reason":null}]}
775
1013
776− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null}]}
1014+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
777
1015
778− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"new"}}]},"finish_reason":null}]}
1016+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
779
1017
780− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_string"}}]},"finish_reason":null}]}
1018+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
781
1019
782− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null}]}
1020+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
783
1021
784− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null}]}
1022+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"!\""},"finish_reason":null}]}
785
1023
786− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1024+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
787
1025
788− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1026+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
789
1027
790− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Crush"}}]},"finish_reason":null}]}
1028+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
791
1029
792− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\","}}]},"finish_reason":null}]}
1030+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
793
1031
794− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null}]}
1032+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Crush"},"finish_reason":null}]}
795
1033
796− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"old"}}]},"finish_reason":null}]}
1034+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"!\")"},"finish_reason":null}]}
797
1035
798− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_string"}}]},"finish_reason":null}]}
1036+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" but"},"finish_reason":null}]}
799
1037
800− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null}]}
1038+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" then"},"finish_reason":null}]}
801
1039
802− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null}]}
1040+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
803
1041
804− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1042+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" second"},"finish_reason":null}]}
805
1043
806− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1044+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
807
1045
808− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" World"}}]},"finish_reason":null}]}
1046+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" failed"},"finish_reason":null}]}
809
1047
810− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\""}}]},"finish_reason":null}]}
1048+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" because"},"finish_reason":null}]}
811
1049
812− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"},"}}]},"finish_reason":null}]}
1050+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
813
1051
814− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" {\""}}]},"finish_reason":null}]}
1052+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" was"},"finish_reason":null}]}
815
1053
816− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"new"}}]},"finish_reason":null}]}
1054+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" looking"},"finish_reason":null}]}
817
1055
818− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_string"}}]},"finish_reason":null}]}
1056+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
819
1057
820− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null}]}
1058+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
821
1059
822− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \"\\"}}]},"finish_reason":null}]}
1060+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" old"},"finish_reason":null}]}
823
1061
824− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"t"}}]},"finish_reason":null}]}
1062+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" string"},"finish_reason":null}]}
825
1063
826− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"//"}}]},"finish_reason":null}]}
1064+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
827
1065
828− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" G"}}]},"finish_reason":null}]}
1066+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
829
1067
830− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"reeting"}}]},"finish_reason":null}]}
1068+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
831
1069
832− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}]}
1070+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
833
1071
834− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\t"}}]},"finish_reason":null}]}
1072+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" World"},"finish_reason":null}]}
835
1073
836− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"fmt"}}]},"finish_reason":null}]}
1074+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"!\""},"finish_reason":null}]}
837
1075
838− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
1076+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" which"},"finish_reason":null}]}
839
1077
840− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
1078+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
841
1079
842− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1080+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" longer"},"finish_reason":null}]}
843
1081
844− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1082+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" exists"},"finish_reason":null}]}
845
1083
846− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Crush"}}]},"finish_reason":null}]}
1084+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" after"},"finish_reason":null}]}
847
1085
848− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\"}}]},"finish_reason":null}]}
1086+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
849
1087
850− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\")"}}]},"finish_reason":null}]}
1088+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
851
1089
852− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\","}}]},"finish_reason":null}]}
1090+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
853
1091
854− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null}]}
1092+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
855
1093
856− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"old"}}]},"finish_reason":null}]}
1094+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Since"},"finish_reason":null}]}
857
1095
858− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_string"}}]},"finish_reason":null}]}
1096+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" mult"},"finish_reason":null}]}
859
1097
860− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null}]}
1098+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ied"},"finish_reason":null}]}
861
1099
862− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \"\\"}}]},"finish_reason":null}]}
1100+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"it"},"finish_reason":null}]}
863
1101
864− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tf"}}]},"finish_reason":null}]}
1102+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" applies"},"finish_reason":null}]}
865
1103
866− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"mt"}}]},"finish_reason":null}]}
1104+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edits"},"finish_reason":null}]}
867
1105
868− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
1106+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" sequentially"},"finish_reason":null}]}
869
1107
870− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
1108+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
871
1109
872− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1110+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
873
1111
874− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1112+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" second"},"finish_reason":null}]}
875
1113
876− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Crush"}}]},"finish_reason":null}]}
1114+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
877
1115
878− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\"}}]},"finish_reason":null}]}
1116+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" needs"},"finish_reason":null}]}
879
1117
880− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\")"}}]},"finish_reason":null}]}
1118+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
881
1119
882− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
1120+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" reference"},"finish_reason":null}]}
883
1121
884− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"]"}}]},"finish_reason":null}]}
1122+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
885
1123
886− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"file_path\": "}}]},"finish_reason":null}]}
1124+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" already"},"finish_reason":null}]}
887
1125
888− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
1126+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"-mod"},"finish_reason":null}]}
889
1127
890− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
1128+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ified"},"finish_reason":null}]}
891
1129
892− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
1130+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
893
1131
894− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
1132+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
895
1133
896− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
1134+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
897
1135
898− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
1136+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
899
1137
900− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
1138+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" fix"},"finish_reason":null}]}
901
1139
902− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
1140+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
903
1141
904− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
1142+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" second"},"finish_reason":null}]}
905
1143
906− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
1144+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" edit"},"finish_reason":null}]}
907
1145
908− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
1146+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" by"},"finish_reason":null}]}
909
1147
910− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
1148+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
911
1149
912− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
1150+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
913
1151
914− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
1152+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" updated"},"finish_reason":null}]}
915
1153
916− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
1154+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
917
1155
918− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
1156+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
919
1157
920− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
1158+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_5ca3b6e1898be023","type":"function","index":0,"function":{"name":"edit","arguments":""}}]},"finish_reason":null}]}
921
1159
922− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
1160+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
923
1161
924− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
1162+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
925
1163
926− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
1164+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
927
1165
928− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
1166+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
929
1167
930− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
1168+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
931
1169
932− data: {"id":"chatcmpl-4c94d5eb32ed6ae8c840e50c","object":"chat.completion.chunk","created":1780069698,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":118,"completion_tokens":95,"total_tokens":8021,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00055358,"hypercredits":0.0110716},"remaining":{"hypercredits":0}}}
1170+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
1171+
1172+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
1173+
1174+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
1175+
1176+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
1177+
1178+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
1179+
1180+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
1181+
1182+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
1183+
1184+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
1185+
1186+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
1187+
1188+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
1189+
1190+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
1191+
1192+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
1193+
1194+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
1195+
1196+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
1197+
1198+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
1199+
1200+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
1201+
1202+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1203+
1204+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"new_string\": \""}}]},"finish_reason":null}]}
1205+
1206+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\t"}}]},"finish_reason":null}]}
1207+
1208+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"//"}}]},"finish_reason":null}]}
1209+
1210+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" G"}}]},"finish_reason":null}]}
1211+
1212+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"reeting"}}]},"finish_reason":null}]}
1213+
1214+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\n"}}]},"finish_reason":null}]}
1215+
1216+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
1217+
1218+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
1219+
1220+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
1221+
1222+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1223+
1224+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1225+
1226+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Crush"}}]},"finish_reason":null}]}
1227+
1228+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
1229+
1230+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1231+
1232+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"old_string\": \""}}]},"finish_reason":null}]}
1233+
1234+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
1235+
1236+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
1237+
1238+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
1239+
1240+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
1241+
1242+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
1243+
1244+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" Crush"}}]},"finish_reason":null}]}
1245+
1246+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
1247+
1248+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1249+
1250+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
1251+
1252+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
1253+
1254+ data: {"id":"chatcmpl-23c80df6ea3f809847dd4af5","object":"chat.completion.chunk","created":1782413825,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":936,"completion_tokens":140,"total_tokens":8555,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":95},"cost":{"usd":0.0023444,"hypercredits":0.046888},"remaining":{"hypercredits":0}}}
933
1255
934 data: [DONE]
1256 data: [DONE]
935
1257
@@ -938,15 +1260,15 @@ interactions:
938 - text/event-stream
1260 - text/event-stream
939 status: 200 OK
1261 status: 200 OK
940 code: 200
1262 code: 200
941− duration: 521.977833ms
1263+ duration: 1.048298875s
942−- id: 3
1264+- id: 4
943 request:
1265 request:
944 proto: HTTP/1.1
1266 proto: HTTP/1.1
945 proto_major: 1
1267 proto_major: 1
946 proto_minor: 1
1268 proto_minor: 1
947− content_length: 35222
1269+ content_length: 37817
948 host: ""
1270 host: ""
949− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_4BvAOulZ4vPbT3o9XRDa7mrF\",\"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 understand its current content.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_4BvAOulZ4vPbT3o9XRDa7mrF\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_aHnPYHta9B2b9HfMoNV5jxjf\",\"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_aHnPYHta9B2b9HfMoNV5jxjf\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
1271+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3cee374c3e013d11\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"Hello, Crush!\\\", \\\"old_string\\\": \\\"Hello, World!\\\"}, {\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 of 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go (1 edit(s) failed)\\n</result>\\n\",\"tool_call_id\":\"call_3cee374c3e013d11\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_5ca3b6e1898be023\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\", \\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\"}\",\"name\":\"edit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The first edit succeeded (changing \\\"Hello, World!\\\" to \\\"Hello, Crush!\\\") but then the second edit failed because it was looking for the old string with \\\"Hello, World!\\\" which no longer exists after the first edit. Since multiedit applies edits sequentially, the second edit needs to reference the already-modified content.\\n\\nLet me fix the second edit by using the updated content.\"},{\"content\":\"<result>\\nContent replaced in file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_5ca3b6e1898be023\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
950 headers:
1272 headers:
951 Accept:
1273 Accept:
952 - application/json
1274 - application/json
@@ -963,61 +1285,59 @@ interactions:
963 content_length: -1
1285 content_length: -1
964 uncompressed: true
1286 uncompressed: true
965 body: |+
1287 body: |+
966− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1288+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
967
1289
968− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_Qp5BlRVFac2IqxDa86BHkiPX","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
1290+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_0740d7fb4460c2fe","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
969
1291
970− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
1292+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
971
1293
972− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
1294+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
973
1295
974− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
1296+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
975
1297
976− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
1298+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
977
1299
978− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
1300+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
979
1301
980− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
1302+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
981
1303
982− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
1304+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
983
1305
984− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
1306+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
985
1307
986− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
1308+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
987
1309
988− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
1310+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
989
1311
990− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
1312+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
991
1313
992− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
1314+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
993
1315
994− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
1316+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
995
1317
996− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
1318+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
997
1319
998− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
1320+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
999
1321
1000− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
1322+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
1001
1323
1002− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/m"}}]},"finish_reason":null}]}
1324+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
1003
1325
1004− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ult"}}]},"finish_reason":null}]}
1326+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
1005
1327
1006− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"ied"}}]},"finish_reason":null}]}
1328+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
1007
1329
1008− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"it"}}]},"finish_reason":null}]}
1330+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
1009
1331
1010− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
1332+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
1011
1333
1012− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
1334+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
1013
1335
1014− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
1336+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
1015
1337
1016− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
1338+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
1017
1339
1018− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
1340+ data: {"id":"chatcmpl-c62850526540bfec5f86dda4","object":"chat.completion.chunk","created":1782413828,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":100,"completion_tokens":31,"total_tokens":8545,"prompt_tokens_details":{"cached_tokens":8414},"cost":{"usd":0.0002764,"hypercredits":0.005528},"remaining":{"hypercredits":0}}}
1019−
1020− data: {"id":"chatcmpl-731f796a13fe54cfbf8196d7","object":"chat.completion.chunk","created":1780069699,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":60,"completion_tokens":31,"total_tokens":8091,"prompt_tokens_details":{"cached_tokens":8000},"cost":{"usd":0.00020880000000000003,"hypercredits":0.004176},"remaining":{"hypercredits":0}}}
1021
1341
1022 data: [DONE]
1342 data: [DONE]
1023
1343
@@ -1026,15 +1346,15 @@ interactions:
1026 - text/event-stream
1346 - text/event-stream
1027 status: 200 OK
1347 status: 200 OK
1028 code: 200
1348 code: 200
1029− duration: 895.18625ms
1349+ duration: 1.047383917s
1030−- id: 4
1350+- id: 5
1031 request:
1351 request:
1032 proto: HTTP/1.1
1352 proto: HTTP/1.1
1033 proto_major: 1
1353 proto_major: 1
1034 proto_minor: 1
1354 proto_minor: 1
1035− content_length: 35721
1355+ content_length: 38300
1036 host: ""
1356 host: ""
1037− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_4BvAOulZ4vPbT3o9XRDa7mrF\",\"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 understand its current content.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_4BvAOulZ4vPbT3o9XRDa7mrF\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_aHnPYHta9B2b9HfMoNV5jxjf\",\"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_aHnPYHta9B2b9HfMoNV5jxjf\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_Qp5BlRVFac2IqxDa86BHkiPX\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\t// Greeting\\n 7|\\tfmt.Println(\\\"Hello, Crush!\\\")\\n 8|}\\n 9|\\n</file>\\n\",\"tool_call_id\":\"call_Qp5BlRVFac2IqxDa86BHkiPX\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
1357+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use multiedit to change 'Hello, World!' to 'Hello, Crush!' and add a comment '// Greeting' above the fmt.Println line in main.go\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_be8eea5daa27022a\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the file to see its current contents.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_be8eea5daa27022a\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_3cee374c3e013d11\",\"function\":{\"arguments\":\"{\\\"edits\\\": [{\\\"new_string\\\": \\\"Hello, Crush!\\\", \\\"old_string\\\": \\\"Hello, World!\\\"}, {\\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}], \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"multiedit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nApplied 1 of 2 edits to file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go (1 edit(s) failed)\\n</result>\\n\",\"tool_call_id\":\"call_3cee374c3e013d11\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_5ca3b6e1898be023\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\", \\\"new_string\\\": \\\"\\\\t// Greeting\\\\n\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, Crush!\\\\\\\")\\\"}\",\"name\":\"edit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The first edit succeeded (changing \\\"Hello, World!\\\" to \\\"Hello, Crush!\\\") but then the second edit failed because it was looking for the old string with \\\"Hello, World!\\\" which no longer exists after the first edit. Since multiedit applies edits sequentially, the second edit needs to reference the already-modified content.\\n\\nLet me fix the second edit by using the updated content.\"},{\"content\":\"<result>\\nContent replaced in file: /tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\n</result>\\n\",\"tool_call_id\":\"call_5ca3b6e1898be023\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_0740d7fb4460c2fe\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/multiedit_tool/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\t// Greeting\\n 7|\\tfmt.Println(\\\"Hello, Crush!\\\")\\n 8|}\\n 9|\\n</file>\\n\",\"tool_call_id\":\"call_0740d7fb4460c2fe\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
1038 headers:
1358 headers:
1039 Accept:
1359 Accept:
1040 - application/json
1360 - application/json
@@ -1051,63 +1371,63 @@ interactions:
1051 content_length: -1
1371 content_length: -1
1052 uncompressed: true
1372 uncompressed: true
1053 body: |+
1373 body: |+
1054− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1374+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
1055
1375
1056− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
1376+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
1057
1377
1058− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
1378+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
1059
1379
1060− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Updated"},"finish_reason":null}]}
1380+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1061
1381
1062− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" greeting"},"finish_reason":null}]}
1382+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
1063
1383
1064− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
1384+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1065
1385
1066− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" \""},"finish_reason":null}]}
1386+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
1067
1387
1068− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
1388+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
1069
1389
1070− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1390+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1071
1391
1072− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Crush"},"finish_reason":null}]}
1392+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"7"},"finish_reason":null}]}
1073
1393
1074− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!\""},"finish_reason":null}]}
1394+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1075
1395
1076− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
1396+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" now"},"finish_reason":null}]}
1077
1397
1078− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" added"},"finish_reason":null}]}
1398+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" has"},"finish_reason":null}]}
1079
1399
1080− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1400+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
1081
1401
1082− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"//"},"finish_reason":null}]}
1402+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1083
1403
1084− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" G"},"finish_reason":null}]}
1404+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"//"},"finish_reason":null}]}
1085
1405
1086− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"reeting"},"finish_reason":null}]}
1406+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" G"},"finish_reason":null}]}
1087
1407
1088− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1408+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"reeting"},"finish_reason":null}]}
1089
1409
1090− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
1410+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1091
1411
1092− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" above"},"finish_reason":null}]}
1412+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" comment"},"finish_reason":null}]}
1093
1413
1094− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
1414+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
1095
1415
1096− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1416+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `\""},"finish_reason":null}]}
1097
1417
1098− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"fmt"},"finish_reason":null}]}
1418+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
1099
1419
1100− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".Println"},"finish_reason":null}]}
1420+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1101
1421
1102− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1422+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Crush"},"finish_reason":null}]}
1103
1423
1104− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" line"},"finish_reason":null}]}
1424+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!\""},"finish_reason":null}]}
1105
1425
1106− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
1426+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
1107
1427
1108− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
1428+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
1109
1429
1110− data: {"id":"chatcmpl-7ec589f575c15e2f5709ca1c","object":"chat.completion.chunk","created":1780069700,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":96,"completion_tokens":28,"total_tokens":8188,"prompt_tokens_details":{"cached_tokens":8064},"cost":{"usd":0.00024336000000000003,"hypercredits":0.0048672},"remaining":{"hypercredits":0}}}
1430+ data: {"id":"chatcmpl-43a9bbd8080493b6f70c69e4","object":"chat.completion.chunk","created":1782413830,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":343,"completion_tokens":28,"total_tokens":8642,"prompt_tokens_details":{"cached_tokens":8271},"cost":{"usd":0.0006034,"hypercredits":0.012068},"remaining":{"hypercredits":0}}}
1111
1431
1112 data: [DONE]
1432 data: [DONE]
1113
1433
@@ -1116,4 +1436,4 @@ interactions:
1116 - text/event-stream
1436 - text/event-stream
1117 status: 200 OK
1437 status: 200 OK
1118 code: 200
1438 code: 200
1119− duration: 958.960958ms
1439+ duration: 902.639042ms
internal/agent/testdata/TestCoderAgent/glm-5.1/parallel_tool_calls.yaml+435−221
@@ -2,6 +2,86 @@
2version: 2
2version: 2
3interactions:
3interactions:
4- id: 0
4- id: 0
5+ request:
6+ proto: HTTP/1.1
7+ proto_major: 1
8+ proto_minor: 1
9+ content_length: 35722
10+ host: ""
11+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12+ headers:
13+ Accept:
14+ - application/json
15+ Content-Type:
16+ - application/json
17+ User-Agent:
18+ - Charm-Crush/devel (https://charm.land/crush)
19+ url: https://hyper.charm.land/v1/chat/completions
20+ method: POST
21+ response:
22+ proto: HTTP/2.0
23+ proto_major: 2
24+ proto_minor: 0
25+ content_length: -1
26+ uncompressed: true
27+ body: |+
28+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29+
30+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31+
32+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33+
34+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
35+
36+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
37+
38+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
39+
40+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
41+
42+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
43+
44+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
45+
46+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
47+
48+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
49+
50+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
51+
52+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
53+
54+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_863d2e4c3c1b490c","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
55+
56+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \""}}]},"finish_reason":null}]}
57+
58+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"**"}}]},"finish_reason":null}]}
59+
60+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/*."}}]},"finish_reason":null}]}
61+
62+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
63+
64+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
65+
66+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
67+
68+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_ca7def41fb593fc5","type":"function","index":1,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
69+
70+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{}"}}]},"finish_reason":null}]}
71+
72+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
73+
74+ data: {"id":"chatcmpl-1bafa7644e61fe073fbb3f30","object":"chat.completion.chunk","created":1782413846,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":696,"completion_tokens":28,"total_tokens":8204,"prompt_tokens_details":{"cached_tokens":7480},"completion_tokens_details":{"reasoning_tokens":13},"cost":{"usd":0.0011548,"hypercredits":0.023096000000000002},"remaining":{"hypercredits":0}}}
75+
76+ data: [DONE]
77+
78+ headers:
79+ Content-Type:
80+ - text/event-stream
81+ status: 200 OK
82+ code: 200
83+ duration: 1.34867075s
84+- id: 1
5 request:
85 request:
6 proto: HTTP/1.1
86 proto: HTTP/1.1
7 proto_major: 1
87 proto_major: 1
@@ -25,355 +105,463 @@ interactions:
25 content_length: -1
105 content_length: -1
26 uncompressed: true
106 uncompressed: true
27 body: |+
107 body: |+
28− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
109
30− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
31
111
32− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
33
113
34− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
35
115
36− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
37
117
38− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
39
119
40− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
41
121
42− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
43
123
44− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
45
125
46− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
47
127
48− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
49
129
50− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
51
131
52− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
53
133
54− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
55
135
56− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
57
137
58− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
59
139
60− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
61
141
62− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
63
143
64− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
65
145
66− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" all"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
67
147
68− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
69
149
70− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
71
151
72− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
73
153
74− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
75
155
76− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
77
157
78− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
79
159
80− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
81
161
82− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" list"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
83
163
84− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
85
165
86− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
87
167
88− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
89
169
90− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
91
171
92− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" very"},"finish_reason":null}]}
93
173
94− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" important"},"finish_reason":null}]}
95
175
96− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" very"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
97
177
98− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" important"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" you"},"finish_reason":null}]}
99
179
100− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
101
181
102− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" you"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" both"},"finish_reason":null}]}
103
183
104− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" run"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
105
185
106− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" both"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" calls"},"finish_reason":null}]}
107
187
108− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
109
189
110− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" calls"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
111
191
112− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
113
193
114− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
115
195
116− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
117
197
118− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
119
199
120− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
121
201
122− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
123
203
124− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
125
205
126− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
127
207
128− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
129
209
130− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
131
211
132− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
133
213
134− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ≤"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
135
215
136− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
137
217
138− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
139
219
140− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
141
221
142− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
143
223
144− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
145
225
146− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summary"},"finish_reason":null}]}
147
227
148− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
149
229
150− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
151
231
152− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
153
233
154− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
155
235
156− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
157
237
158− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
159
239
160− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
161
241
162− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
163
243
164− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
165
245
166− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
167
247
168− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
169
249
170− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
171
251
172− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
173
253
174− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
175
255
176− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
177
257
178− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
179
259
180− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
181
261
182− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
183
263
184− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
185
265
186− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
187
267
188− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
189
269
190− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
191
271
192− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
193
273
194− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
195
275
196− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
197
277
198− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
199
279
200− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
201
281
202− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Parallel"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
203
283
204− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
205
285
206− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
207
287
208− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
209
289
210− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
211
291
212− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
213
293
214− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
215
295
216− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" directory"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" P"},"finish_reason":null}]}
217
297
218− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
219
299
220− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
221
301
222− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
223
303
224− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
225
305
226− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
227
307
228− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" including"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
229
309
230− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" spaces"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
231
311
232− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
233
313
234− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
235
315
236− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" good"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
237
317
238− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
239
319
240− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Or"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
241
321
242− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
243
323
244− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Run"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
245
325
246− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" glob"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
247
327
248− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
249
329
250− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
251
331
252− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"go"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
253
333
254− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" files"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
255
335
256− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
257
337
258− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ls"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
259
339
260− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
261
341
262− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" parallel"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
263
343
264− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
265
345
266− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
267
347
268− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" b"},"finish_reason":null}]}
269
349
270− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
271
351
272− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
273
353
274− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
275
355
276− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
277
357
278− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
279
359
280− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
281
361
282− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
283
363
284− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
285
365
286− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
287
367
288− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
289
369
290− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
291
371
292− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Parallel"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
293
373
294− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
295
375
296− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
297
377
298− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
299
379
300− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ."},"finish_reason":null}]}
301
381
302− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
303
383
304− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
305
385
306− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
307
387
308− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
388+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
309
389
310− data: {"id":"chatcmpl-fba321fc554468b912a037cf","object":"chat.completion.chunk","created":1780069707,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":233,"completion_tokens":149,"total_tokens":382,"completion_tokens_details":{"reasoning_tokens":132},"cost":{"usd":0.00021335,"hypercredits":0.004267},"remaining":{"hypercredits":0}}}
390+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
311
391
312− data: [DONE]
392+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
313
393
314− headers:
394+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
315− Content-Type:
395+
316− - text/event-stream
396+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
317− status: 200 OK
318− code: 200
319− duration: 388.11675ms
320−- id: 1
321− request:
322− proto: HTTP/1.1
323− proto_major: 1
324− proto_minor: 1
325− content_length: 34035
326− host: ""
327− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
328− headers:
329− Accept:
330− - application/json
331− Content-Type:
332− - application/json
333− User-Agent:
334− - Charm-Crush/devel (https://charm.land/crush)
335− url: https://hyper.charm.land/v1/chat/completions
336− method: POST
337− response:
338− proto: HTTP/2.0
339− proto_major: 2
340− proto_minor: 0
341− content_length: -1
342− uncompressed: true
343− body: |+
344− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
345
397
346− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_ahYKOjB3foFkbILWEFYd57Y2","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
347
399
348− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
349
401
350− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
351
403
352− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
353
405
354− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"**"}}]},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
355
407
356− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/*."}}]},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
357
409
358− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
359
411
360− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
361
413
362− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_9FOIBVsp5OvFXp01VgCefCPx","type":"function","index":1,"function":{"name":"ls","arguments":""}}]},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
363
415
364− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
365
417
366− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"{"}}]},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
367
419
368− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"\"depth\": "}}]},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
369
421
370− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"3"}}]},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
371
423
372− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":1,"function":{"arguments":"}"}}]},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
373
425
374− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
426+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
375
427
376− data: {"id":"chatcmpl-9a13601d7adcbd5076cd2ee2","object":"chat.completion.chunk","created":1780069707,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":726,"completion_tokens":22,"total_tokens":7852,"prompt_tokens_details":{"cached_tokens":7104},"cost":{"usd":0.0010434600000000002,"hypercredits":0.0208692},"remaining":{"hypercredits":0}}}
428+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
429+
430+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
431+
432+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
433+
434+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
435+
436+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
437+
438+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
439+
440+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
441+
442+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
443+
444+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
445+
446+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
447+
448+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" l"},"finish_reason":null}]}
449+
450+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
451+
452+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
453+
454+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
455+
456+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
457+
458+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
459+
460+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
461+
462+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
463+
464+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" d"},"finish_reason":null}]}
465+
466+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
467+
468+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
469+
470+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
471+
472+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
473+
474+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
475+
476+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
477+
478+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
479+
480+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
481+
482+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
483+
484+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
485+
486+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
487+
488+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
489+
490+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
491+
492+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
493+
494+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
495+
496+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" y"},"finish_reason":null}]}
497+
498+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
499+
500+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
501+
502+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
503+
504+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
505+
506+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
507+
508+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
509+
510+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
511+
512+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
513+
514+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
515+
516+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
517+
518+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
519+
520+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
521+
522+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
523+
524+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
525+
526+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
527+
528+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
529+
530+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
531+
532+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
533+
534+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
535+
536+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That"},"finish_reason":null}]}
537+
538+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" seems"},"finish_reason":null}]}
539+
540+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
541+
542+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
543+
544+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Parallel"},"finish_reason":null}]}
545+
546+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" glob"},"finish_reason":null}]}
547+
548+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
549+
550+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ."},"finish_reason":null}]}
551+
552+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
553+
554+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" files"},"finish_reason":null}]}
555+
556+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
557+
558+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" ls"},"finish_reason":null}]}
559+
560+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
561+
562+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
563+
564+ data: {"id":"chatcmpl-4e37b76e5a24bbcab38da89d","object":"chat.completion.chunk","created":1782413845,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":174,"completion_tokens":233,"total_tokens":471,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.00016017800000000002,"hypercredits":0.0032035600000000003},"remaining":{"hypercredits":0}}}
377
565
378 data: [DONE]
566 data: [DONE]
379
567
@@ -382,15 +570,15 @@ interactions:
382 - text/event-stream
570 - text/event-stream
383 status: 200 OK
571 status: 200 OK
384 code: 200
572 code: 200
385− duration: 972.3925ms
573+ duration: 587.031833ms
386- id: 2
574- id: 2
387 request:
575 request:
388 proto: HTTP/1.1
576 proto: HTTP/1.1
389 proto_major: 1
577 proto_major: 1
390 proto_minor: 1
578 proto_minor: 1
391− content_length: 34615
579+ content_length: 36330
392 host: ""
580 host: ""
393− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_ahYKOjB3foFkbILWEFYd57Y2\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"},{\"id\":\"call_9FOIBVsp5OvFXp01VgCefCPx\",\"function\":{\"arguments\":\"{\\\"depth\\\": 3}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/main.go\",\"tool_call_id\":\"call_ahYKOjB3foFkbILWEFYd57Y2\",\"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_9FOIBVsp5OvFXp01VgCefCPx\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
581+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use glob to find all .go files and use ls to list the current directory, it is very important that you run both tool calls in parallel\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_863d2e4c3c1b490c\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/*.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"},{\"id\":\"call_ca7def41fb593fc5\",\"function\":{\"arguments\":\"{}\",\"name\":\"ls\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to run glob and ls in parallel.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/main.go\",\"tool_call_id\":\"call_863d2e4c3c1b490c\",\"role\":\"tool\"},{\"content\":\"\\n- /tmp/crush-test/TestCoderAgent/glm-5.1/parallel_tool_calls/\\n - go.mod\\n - main.go\\n\",\"tool_call_id\":\"call_ca7def41fb593fc5\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
394 headers:
582 headers:
395 Accept:
583 Accept:
396 - application/json
584 - application/json
@@ -407,59 +595,85 @@ interactions:
407 content_length: -1
595 content_length: -1
408 uncompressed: true
596 uncompressed: true
409 body: |+
597 body: |+
410− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
599+
600+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
601+
602+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
603+
604+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"glob"},"finish_reason":null}]}
605+
606+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
607+
608+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" found"},"finish_reason":null}]}
609+
610+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
611+
612+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
613+
614+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
615+
616+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
617+
618+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
619+
620+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
621+
622+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
623+
624+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
411
625
412− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
413
627
414− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
415
629
416− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`\n"},"finish_reason":null}]}
417
631
418− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `."},"finish_reason":null}]}
632+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
419
633
420− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
421
635
422− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
636+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ls"},"finish_reason":null}]}
423
637
424− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
638+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
425
639
426− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" shows"},"finish_reason":null}]}
427
641
428− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
642+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
429
643
430− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
644+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
431
645
432− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
646+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" items"},"finish_reason":null}]}
433
647
434− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
648+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
435
649
436− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Current"},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
437
651
438− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
652+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" directory"},"finish_reason":null}]}
439
653
440− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" contains"},"finish_reason":null}]}
654+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
441
655
442− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
656+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
443
657
444− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
658+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"go"},"finish_reason":null}]}
445
659
446− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
660+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
447
661
448− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
662+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
449
663
450− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
664+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
451
665
452− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
666+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
453
667
454− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
668+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
455
669
456− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
670+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
457
671
458− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
672+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
459
673
460− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
674+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
461
675
462− data: {"id":"chatcmpl-0cb64d48ec795818094457c9","object":"chat.completion.chunk","created":1780069708,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":100,"completion_tokens":26,"total_tokens":7934,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.0002402,"hypercredits":0.004804},"remaining":{"hypercredits":0}}}
676+ data: {"id":"chatcmpl-7090d32ec36c9818f7952266","object":"chat.completion.chunk","created":1782413847,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":73,"completion_tokens":39,"total_tokens":8287,"prompt_tokens_details":{"cached_tokens":8175},"cost":{"usd":0.00027380000000000004,"hypercredits":0.005476000000000001},"remaining":{"hypercredits":0}}}
463
677
464 data: [DONE]
678 data: [DONE]
465
679
@@ -468,4 +682,4 @@ interactions:
468 - text/event-stream
682 - text/event-stream
469 status: 200 OK
683 status: 200 OK
470 code: 200
684 code: 200
471− duration: 507.071084ms
685+ duration: 1.056707666s
internal/agent/testdata/TestCoderAgent/glm-5.1/read_a_file.yaml+155−199
@@ -25,181 +25,149 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" based"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" on"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
49
49
50− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
51
51
52− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
53
53
54− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" User"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
55
55
56− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wrote"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read"},"finish_reason":null}]}
57
57
58− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
59
59
60− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
61
61
62− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mod"},"finish_reason":null}]}
63
63
64− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
65
65
66− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c"},"finish_reason":null}]}
67
67
68− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"think"},"finish_reason":null}]}
69
69
70− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003e\n\n"},"finish_reason":null}]}
71
71
72− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003c/"},"finish_reason":null}]}
73
73
74− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"think"},"finish_reason":null}]}
75
75
76− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003e\""},"finish_reason":null}]}
77
77
78− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" They"},"finish_reason":null}]}
79
79
80− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" want"},"finish_reason":null}]}
81
81
82− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
83
83
84− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
85
85
86− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mod"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
87
87
88− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\n"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
89
89
90− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
91
91
92− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"think"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
93
93
94− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003e\n\n"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
95
95
96− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003c/"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
97
97
98− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"think"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
99
99
100− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\u003e\""},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
101
101
102− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" This"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
103
103
104− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
105
105
106− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
107
107
108− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
109
109
110− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Read"},"finish_reason":null}]}
111
111
112− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
113
113
114− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
115
115
116− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" mod"},"finish_reason":null}]}
117
117
118− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
119
119
120− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
121
121
122− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Reading"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
123
123
124− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
125
125
126− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
127
127
128− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
129
129
130− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" File"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Reading"},"finish_reason":null}]}
131
131
132− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
133
133
134− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
135
135
136− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
137
137
138− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
139
139
140− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
141
141
142− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Under"},"finish_reason":null}]}
143
143
144− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
145
145
146− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
147
147
148− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
149
149
150− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
151
151
152− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
153
153
154− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" good"},"finish_reason":null}]}
155
155
156− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"/"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
157
157
158− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"col"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Reading"},"finish_reason":null}]}
159
159
160− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
161
161
162− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" go"},"finish_reason":null}]}
163
163
164− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
165
165
166− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
167
167
168− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
169
169
170− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-03b55924f31ba060403e77f9","object":"chat.completion.chunk","created":1782413782,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":208,"completion_tokens":79,"total_tokens":287,"completion_tokens_details":{"reasoning_tokens":65},"cost":{"usd":0.00011587200000000002,"hypercredits":0.00231744},"remaining":{"hypercredits":0}}}
171−
172− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Reading"},"finish_reason":null}]}
173−
174− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Reading"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" go"},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".mod"},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
199−
200− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
201−
202− data: {"id":"chatcmpl-b7a3d84dcc5dde860a80f343","object":"chat.completion.chunk","created":1780069669,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":208,"completion_tokens":95,"total_tokens":303,"completion_tokens_details":{"reasoning_tokens":81},"cost":{"usd":0.0001448,"hypercredits":0.0028959999999999997},"remaining":{"hypercredits":0}}}
203
171
204 data: [DONE]
172 data: [DONE]
205
173
@@ -208,15 +176,15 @@ interactions:
208 - text/event-stream
176 - text/event-stream
209 status: 200 OK
177 status: 200 OK
210 code: 200
178 code: 200
211− duration: 394.481292ms
179+ duration: 466.702584ms
212- id: 1
180- id: 1
213 request:
181 request:
214 proto: HTTP/1.1
182 proto: HTTP/1.1
215 proto_major: 1
183 proto_major: 1
216 proto_minor: 1
184 proto_minor: 1
217− content_length: 33908
185+ content_length: 35595
218 host: ""
186 host: ""
219− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
187+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
220 headers:
188 headers:
221 Accept:
189 Accept:
222 - application/json
190 - application/json
@@ -233,65 +201,47 @@ interactions:
233 content_length: -1
201 content_length: -1
234 uncompressed: true
202 uncompressed: true
235 body: |+
203 body: |+
236− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
237−
238− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
239−
240− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
241−
242− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
243−
244− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
245−
246− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
247−
248− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
249−
250− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
251
205
252− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
253
207
254− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
255
209
256− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
257
211
258− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
259
213
260− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Let"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
261
215
262− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
263
217
264− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" go"},"finish_reason":null}]}
265
219
266− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".mod"},"finish_reason":null}]}
267
221
268− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
269
223
270− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" it"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
271
225
272− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_6656c17dd769fe3b","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
273
227
274− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_7Nc5SiqEXN8EoyKZOuMcS6tr","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \""}}]},"finish_reason":null}]}
275
229
276− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"**"}}]},"finish_reason":null}]}
277
231
278− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
279
233
280− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"pattern\": "}}]},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
281
235
282− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"**"}}]},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".mod"}}]},"finish_reason":null}]}
283
237
284− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
285
239
286− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"go"}}]},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
287
241
288− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".mod"}}]},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
289
243
290− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-733f6315b9c8c13651353ecc","object":"chat.completion.chunk","created":1782413782,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":671,"completion_tokens":24,"total_tokens":8174,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":10},"cost":{"usd":0.001089,"hypercredits":0.021779999999999997},"remaining":{"hypercredits":0}}}
291−
292− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
293−
294− data: {"id":"chatcmpl-6c1a627e1aeebb81fed69cbf","object":"chat.completion.chunk","created":1780069671,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":700,"completion_tokens":32,"total_tokens":7836,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":17},"cost":{"usd":0.0011228000000000002,"hypercredits":0.022456000000000004},"remaining":{"hypercredits":0}}}
295
245
296 data: [DONE]
246 data: [DONE]
297
247
@@ -300,15 +250,15 @@ interactions:
300 - text/event-stream
250 - text/event-stream
301 status: 200 OK
251 status: 200 OK
302 code: 200
252 code: 200
303− duration: 1.828266958s
253+ duration: 1.034875875s
304- id: 2
254- id: 2
305 request:
255 request:
306 proto: HTTP/1.1
256 proto: HTTP/1.1
307 proto_major: 1
257 proto_major: 1
308 proto_minor: 1
258 proto_minor: 1
309− content_length: 34294
259+ content_length: 35935
310 host: ""
260 host: ""
311− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_7Nc5SiqEXN8EoyKZOuMcS6tr\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to read the go.mod file. Let me find and read it.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_7Nc5SiqEXN8EoyKZOuMcS6tr\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
261+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6656c17dd769fe3b\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to read a go.mod file.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_6656c17dd769fe3b\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
312 headers:
262 headers:
313 Accept:
263 Accept:
314 - application/json
264 - application/json
@@ -325,57 +275,55 @@ interactions:
325 content_length: -1
275 content_length: -1
326 uncompressed: true
276 uncompressed: true
327 body: |+
277 body: |+
328− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
329
279
330− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_eiYecsjzoLpukgMCT8EogCZD","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_a01214c04522706d","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
331
281
332− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
333
283
334− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
335
285
336− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
337
287
338− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
339
289
340− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
341
291
342− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
343
293
344− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
345
295
346− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
347
297
348− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
349
299
350− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
351
301
352− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
353
303
354− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
355
305
356− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
357
307
358− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
359
309
360− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/read"}}]},"finish_reason":null}]}
361
311
362− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
363
313
364− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/read"}}]},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
365
315
366− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/go"}}]},"finish_reason":null}]}
367
317
368− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".mod"}}]},"finish_reason":null}]}
369
319
370− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/go"}}]},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
371
321
372− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".mod"}}]},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
373
323
374− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
375
325
376− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
326+ data: {"id":"chatcmpl-cf4d776728d0ac9df266f943","object":"chat.completion.chunk","created":1782413784,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":37,"completion_tokens":29,"total_tokens":8215,"prompt_tokens_details":{"cached_tokens":8149},"cost":{"usd":0.00017940000000000002,"hypercredits":0.0035880000000000005},"remaining":{"hypercredits":0}}}
377−
378− data: {"id":"chatcmpl-cdcb80e89d80fae8a62f3656","object":"chat.completion.chunk","created":1780069672,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":96,"completion_tokens":29,"total_tokens":7869,"prompt_tokens_details":{"cached_tokens":7744},"cost":{"usd":0.00024756,"hypercredits":0.0049512},"remaining":{"hypercredits":0}}}
379
327
380 data: [DONE]
328 data: [DONE]
381
329
@@ -384,15 +332,15 @@ interactions:
384 - text/event-stream
332 - text/event-stream
385 status: 200 OK
333 status: 200 OK
386 code: 200
334 code: 200
387− duration: 1.298647583s
335+ duration: 965.956083ms
388- id: 3
336- id: 3
389 request:
337 request:
390 proto: HTTP/1.1
338 proto: HTTP/1.1
391 proto_major: 1
339 proto_major: 1
392 proto_minor: 1
340 proto_minor: 1
393− content_length: 34696
341+ content_length: 36321
394 host: ""
342 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 THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_7Nc5SiqEXN8EoyKZOuMcS6tr\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to read the go.mod file. Let me find and read it.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_7Nc5SiqEXN8EoyKZOuMcS6tr\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_eiYecsjzoLpukgMCT8EogCZD\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|module example.com/testproject\\n 2|\\n 3|go 1.23\\n 4|\\n</file>\\n\",\"tool_call_id\":\"call_eiYecsjzoLpukgMCT8EogCZD\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
343+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Read the go mod\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6656c17dd769fe3b\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/go.mod\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants to read a go.mod file.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\",\"tool_call_id\":\"call_6656c17dd769fe3b\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_a01214c04522706d\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/read_a_file/go.mod\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|module example.com/testproject\\n 2|\\n 3|go 1.23\\n 4|\\n</file>\\n\",\"tool_call_id\":\"call_a01214c04522706d\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
396 headers:
344 headers:
397 Accept:
345 Accept:
398 - application/json
346 - application/json
@@ -409,43 +357,51 @@ interactions:
409 content_length: -1
357 content_length: -1
410 uncompressed: true
358 uncompressed: true
411 body: |+
359 body: |+
412− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
361+
362+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
363+
364+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" module"},"finish_reason":null}]}
365+
366+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" is"},"finish_reason":null}]}
367+
368+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
413
369
414− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Module"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
415
371
416− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
417
373
418− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"example"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/test"},"finish_reason":null}]}
419
375
420− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"project"},"finish_reason":null}]}
421
377
422− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/test"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
423
379
424− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"project"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
425
381
426− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`,"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
427
383
428− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
429
385
430− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
431
387
432− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
433
389
434− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"23"},"finish_reason":null}]}
435
391
436− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"23"},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
437
393
438− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
439
395
440− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" no"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" no"},"finish_reason":null}]}
441
397
442− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" dependencies"},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" dependencies"},"finish_reason":null}]}
443
399
444− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
445
401
446− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
402+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
447
403
448− data: {"id":"chatcmpl-0d1735ba3b3dc4655ba61003","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":99,"completion_tokens":18,"total_tokens":7925,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00020529,"hypercredits":0.0041058},"remaining":{"hypercredits":0}}}
404+ data: {"id":"chatcmpl-6b53cd6b5f60681b4d237338","object":"chat.completion.chunk","created":1782413785,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8210,"completion_tokens":22,"total_tokens":8275,"prompt_tokens_details":{"cached_tokens":43},"cost":{"usd":0.0115908,"hypercredits":0.231816},"remaining":{"hypercredits":0}}}
449
405
450 data: [DONE]
406 data: [DONE]
451
407
@@ -454,4 +410,4 @@ interactions:
454 - text/event-stream
410 - text/event-stream
455 status: 200 OK
411 status: 200 OK
456 code: 200
412 code: 200
457− duration: 998.653042ms
413+ duration: 1.002548458s
internal/agent/testdata/TestCoderAgent/glm-5.1/simple_test.yaml+118−128
@@ -25,179 +25,151 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
49
49
50− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
51
51
52− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
53
53
54− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
55
55
56− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
57
57
58− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
59
59
60− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
61
61
62− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" They"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" we"},"finish_reason":null}]}
63
63
64− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" want"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
65
65
66− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
67
67
68− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
69
69
70− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
71
71
72− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
73
73
74− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
75
75
76− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
77
77
78− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
79
79
80− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
81
81
82− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
83
83
84− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
85
85
86− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Language"},"finish_reason":null}]}
87
87
88− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
89
89
90− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" English"},"finish_reason":null}]}
91
91
92− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
93
93
94− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
95
95
96− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
97
97
98− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" more"},"finish_reason":null}]}
99
99
100− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" than"},"finish_reason":null}]}
101
101
102− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
103
103
104− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
105
105
106− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
107
107
108− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Or"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
109
109
110− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
111
111
112− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
113
113
114− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
115
115
116− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
117
117
118− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
119
119
120− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
121
121
122− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summary"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
123
123
124− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" of"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
125
125
126− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user's"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
127
127
128− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
129
129
130− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
131
131
132− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" The"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
133
133
134− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
135
135
136− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
137
137
138− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
139
139
140− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
141
141
142− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
143
143
144− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
145
145
146− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
147
147
148− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
149
149
150− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
151
151
152− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
153
153
154− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
155
155
156− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
157
157
158− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
159
159
160− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" output"},"finish_reason":null}]}
161
161
162− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
163
163
164− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Greeting"},"finish_reason":null}]}
165
165
166− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
167
167
168− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Greeting"},"finish_reason":null}]}
169
169
170− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
171
171
172− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-3c980561c76e6be1d1488de7","object":"chat.completion.chunk","created":1782413779,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":146,"completion_tokens":77,"total_tokens":287,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.0001,"hypercredits":0.002},"remaining":{"hypercredits":0}}}
173−
174− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
175−
176− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
177−
178− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
179−
180− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
181−
182− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
183−
184− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
185−
186− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Thus"},"finish_reason":null}]}
187−
188− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" answer"},"finish_reason":null}]}
189−
190− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
191−
192− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Hello"},"finish_reason":null}]}
193−
194− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
195−
196− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
197−
198− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
199−
200− data: {"id":"chatcmpl-0fd24293c5139ce426ac87d2","object":"chat.completion.chunk","created":1780069667,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":205,"completion_tokens":94,"total_tokens":299,"completion_tokens_details":{"reasoning_tokens":84},"cost":{"usd":0.00014548,"hypercredits":0.0029095999999999996},"remaining":{"hypercredits":0}}}
201
173
202 data: [DONE]
174 data: [DONE]
203
175
@@ -206,15 +178,15 @@ interactions:
206 - text/event-stream
178 - text/event-stream
207 status: 200 OK
179 status: 200 OK
208 code: 200
180 code: 200
209− duration: 965.865833ms
181+ duration: 878.40675ms
210- id: 1
182- id: 1
211 request:
183 request:
212 proto: HTTP/1.1
184 proto: HTTP/1.1
213 proto_major: 1
185 proto_major: 1
214 proto_minor: 1
186 proto_minor: 1
215− content_length: 33898
187+ content_length: 35585
216 host: ""
188 host: ""
217− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/simple_test\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
189+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/simple_test\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"Hello\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
218 headers:
190 headers:
219 Accept:
191 Accept:
220 - application/json
192 - application/json
@@ -231,51 +203,69 @@ interactions:
231 content_length: -1
203 content_length: -1
232 uncompressed: true
204 uncompressed: true
233 body: |+
205 body: |+
234− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
207+
208+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
209+
210+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
211+
212+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
213+
214+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" said"},"finish_reason":null}]}
215+
216+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
217+
218+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
219+
220+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
221+
222+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" This"},"finish_reason":null}]}
223+
224+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
235
225
236− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
237
227
238− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" simple"},"finish_reason":null}]}
239
229
240− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" said"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" greeting"},"finish_reason":null}]}
241
231
242− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
243
233
244− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Hello"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" so"},"finish_reason":null}]}
245
235
246− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" I"},"finish_reason":null}]}
247
237
248− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" I"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
249
239
250− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" should"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" respond"},"finish_reason":null}]}
251
241
252− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" respond"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" conc"},"finish_reason":null}]}
253
243
254− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" conc"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"is"},"finish_reason":null}]}
255
245
256− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"is"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ely"},"finish_reason":null}]}
257
247
258− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"ely"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
259
249
260− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hi"},"finish_reason":null}]}
261
251
262− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Hi"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
263
253
264− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" How"},"finish_reason":null}]}
265
255
266− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" How"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}]}
267
257
268− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" can"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}]}
269
259
270− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" I"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" help"},"finish_reason":null}]}
271
261
272− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" help"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
273
263
274− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"?"},"finish_reason":null}]}
275
265
276− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
266+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
277
267
278− data: {"id":"chatcmpl-879afd4304b57ccc206c58da","object":"chat.completion.chunk","created":1780069669,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":7799,"completion_tokens":22,"total_tokens":7821,"completion_tokens_details":{"reasoning_tokens":13},"cost":{"usd":0.01036369,"hypercredits":0.20727379999999998},"remaining":{"hypercredits":0}}}
268+ data: {"id":"chatcmpl-020a1c14dc188580b7808b08","object":"chat.completion.chunk","created":1782413780,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8103,"completion_tokens":31,"total_tokens":8177,"prompt_tokens_details":{"cached_tokens":43},"completion_tokens_details":{"reasoning_tokens":22},"cost":{"usd":0.011577399999999998,"hypercredits":0.23154799999999995},"remaining":{"hypercredits":0}}}
279
269
280 data: [DONE]
270 data: [DONE]
281
271
@@ -284,4 +274,4 @@ interactions:
284 - text/event-stream
274 - text/event-stream
285 status: 200 OK
275 status: 200 OK
286 code: 200
276 code: 200
287− duration: 2.265527042s
277+ duration: 1.659991334s
internal/agent/testdata/TestCoderAgent/glm-5.1/sourcegraph_tool.yaml+1034−392
@@ -2,6 +2,64 @@
2version: 2
2version: 2
3interactions:
3interactions:
4- id: 0
4- id: 0
5+ request:
6+ proto: HTTP/1.1
7+ proto_major: 1
8+ proto_minor: 1
9+ content_length: 35645
10+ host: ""
11+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use sourcegraph to search for 'func main' in Go repositories\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
12+ headers:
13+ Accept:
14+ - application/json
15+ Content-Type:
16+ - application/json
17+ User-Agent:
18+ - Charm-Crush/devel (https://charm.land/crush)
19+ url: https://hyper.charm.land/v1/chat/completions
20+ method: POST
21+ response:
22+ proto: HTTP/2.0
23+ proto_major: 2
24+ proto_minor: 0
25+ content_length: -1
26+ uncompressed: true
27+ body: |+
28+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29+
30+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_ed4abf0a0b9be3a4","type":"function","index":0,"function":{"name":"sourcegraph","arguments":""}}]},"finish_reason":null}]}
31+
32+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"count\": 20"}}]},"finish_reason":null}]}
33+
34+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"query\": \""}}]},"finish_reason":null}]}
35+
36+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"func"}}]},"finish_reason":null}]}
37+
38+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" main"}}]},"finish_reason":null}]}
39+
40+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" lang"}}]},"finish_reason":null}]}
41+
42+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}]}
43+
44+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Go"}}]},"finish_reason":null}]}
45+
46+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
47+
48+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
49+
50+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
51+
52+ data: {"id":"chatcmpl-b40f2adc4785e5132c405060","object":"chat.completion.chunk","created":1782413832,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":680,"completion_tokens":22,"total_tokens":8181,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.0010488,"hypercredits":0.020975999999999998},"remaining":{"hypercredits":0}}}
53+
54+ data: [DONE]
55+
56+ headers:
57+ Content-Type:
58+ - text/event-stream
59+ status: 200 OK
60+ code: 200
61+ duration: 1.783952917s
62+- id: 1
5 request:
63 request:
6 proto: HTTP/1.1
64 proto: HTTP/1.1
7 proto_major: 1
65 proto_major: 1
@@ -25,549 +83,799 @@ interactions:
25 content_length: -1
83 content_length: -1
26 uncompressed: true
84 uncompressed: true
27 body: |+
85 body: |+
28− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
87
30− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
89
32− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
33
91
34− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
35
93
36− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
37
95
38− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
39
97
40− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
41
99
42− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
43
101
44− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
45
103
46− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" max"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
47
105
48− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
49
107
50− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
51
109
52− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
53
111
54− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
55
113
56− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
57
115
58− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
59
117
60− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
61
119
62− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
63
121
64− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
65
123
66− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
67
125
68− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
69
127
70− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
71
129
72− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
73
131
74− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" message"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
75
133
76− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
77
135
78− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
79
137
80− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Need"},"finish_reason":null}]}
81
139
82− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" source"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
83
141
84− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
85
143
86− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
87
145
88− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
89
147
90− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
91
149
92− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
93
151
94− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
95
153
96− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
97
155
98− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
99
157
100− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
101
159
102− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
103
161
104− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
105
163
106− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
107
165
108− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
109
167
110− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
111
169
112− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
113
171
114− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
115
173
116− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Search"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
117
175
118− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
119
177
120− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
121
179
122− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
123
181
124− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
125
183
126− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
127
185
128− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
129
187
130− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
131
189
132− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Possible"},"finish_reason":null}]}
133
191
134− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
135
193
136− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
137
195
138− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
139
197
140− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
141
199
142− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
143
201
144− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
145
203
146− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
147
205
148− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
149
207
150− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
151
209
152− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Search"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
153
211
154− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
155
213
156− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
157
215
158− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
159
217
160− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
161
219
162− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Count"},"finish_reason":null}]}
163
221
164− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
165
223
166− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
167
225
168− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
169
227
170− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
171
229
172− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
173
231
174− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
175
233
176− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Searching"},"finish_reason":null}]}
177
235
178− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
179
237
180− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
181
239
182− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
183
241
184− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
185
243
186− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
187
245
188− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
189
247
190− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
191
249
192− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
193
251
194− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
195
253
196− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
197
255
198− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"S"},"finish_reason":null}]}
199
257
200− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
201
259
202− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
203
261
204− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
205
263
206− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
207
265
208− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
209
267
210− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
211
269
212− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
213
271
214− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
215
273
216− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
217
275
218− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
219
277
220− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
221
279
222− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
223
281
224− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
225
283
226− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
227
285
228− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
229
287
230− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
231
289
232− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
233
291
234− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
235
293
236− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
237
295
238− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
239
297
240− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
241
299
242− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
243
301
244− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
245
303
246− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
247
305
248− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
249
307
250− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
251
309
252− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
253
311
254− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
255
313
256− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
257
315
258− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
259
317
260− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
261
319
262− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
263
321
264− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
265
323
266− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
267
325
268− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
269
327
270− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
271
329
272− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
273
331
274− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
275
333
276− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
277
335
278− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
279
337
280− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
281
339
282− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
283
341
284− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
285
343
286− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
287
345
288− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
289
347
290− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
291
349
292− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
293
351
294− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
295
353
296− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
297
355
298− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
299
357
300− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
301
359
302− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
303
361
304− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
362+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
305
363
306− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
364+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
307
365
308− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
366+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
309
367
310− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
368+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
311
369
312− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
370+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
313
371
314− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
372+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
315
373
316− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
374+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
317
375
318− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
376+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
319
377
320− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
321
379
322− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
323
381
324− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
325
383
326− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
327
385
328− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
329
387
330− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
331
389
332− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
333
391
334− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
335
393
336− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
337
395
338− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
339
397
340− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
341
399
342− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
343
401
344− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
345
403
346− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
347
405
348− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
349
407
350− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
351
409
352− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
353
411
354− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
355
413
356− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
357
415
358− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
359
417
360− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
361
419
362− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
363
421
364− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
365
423
366− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
367
425
368− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
369
427
370− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
371
429
372− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
373
431
374− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" w"},"finish_reason":null}]}
375
433
376− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
377
435
378− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
379
437
380− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
381
439
382− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" t"},"finish_reason":null}]}
383
441
384− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
385
443
386− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
387
445
388− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
389
447
390− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
391
449
392− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
393
451
394− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
395
453
396− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
397
455
398− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
399
457
400− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
401
459
402− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
403
461
404− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
405
463
406− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
407
465
408− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
409
467
410− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
411
469
412− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
413
471
414− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
415
473
416− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Exactly"},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
417
475
418− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
419
477
420− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
478+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
421
479
422− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
480+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
423
481
424− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
482+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
425
483
426− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
484+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
427
485
428− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
486+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
429
487
430− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
488+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
431
489
432− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
490+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
433
491
434− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
492+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
435
493
436− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
494+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"51"},"finish_reason":null}]}
437
495
438− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
496+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
439
497
440− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
498+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
441
499
442− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
500+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
443
501
444− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
502+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
445
503
446− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
447
505
448− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Search"},"finish_reason":null}]}
506+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"52"},"finish_reason":null}]}
449
507
450− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
451
509
452− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" func"},"finish_reason":null}]}
510+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
453
511
454− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" exceeds"},"finish_reason":null}]}
455
513
456− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
457
515
458− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
459
517
460− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
518+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
461
519
462− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
463
521
464− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Source"},"finish_reason":null}]}
522+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
465
523
466− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"graph"},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
467
525
468− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
526+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
469
527
470− data: {"id":"chatcmpl-f049264783b8d33719650cf9","object":"chat.completion.chunk","created":1780069701,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":217,"completion_tokens":229,"total_tokens":446,"completion_tokens_details":{"reasoning_tokens":210},"cost":{"usd":0.00030685,"hypercredits":0.006137},"remaining":{"hypercredits":0}}}
528+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
471
529
472− data: [DONE]
530+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
473
531
474− headers:
532+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" shorten"},"finish_reason":null}]}
475− Content-Type:
533+
476− - text/event-stream
534+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
477− status: 200 OK
535+
478− code: 200
536+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
479− duration: 408.3265ms
537+
480−- id: 1
538+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Search"},"finish_reason":null}]}
481− request:
539+
482− proto: HTTP/1.1
540+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
483− proto_major: 1
541+
484− proto_minor: 1
542+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
485− content_length: 33958
543+
486− host: ""
544+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
487− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
545+
488− headers:
546+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
489− Accept:
547+
490− - application/json
548+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
491− Content-Type:
549+
492− - application/json
550+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
493− User-Agent:
551+
494− - Charm-Crush/devel (https://charm.land/crush)
552+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
495− url: https://hyper.charm.land/v1/chat/completions
553+
496− method: POST
554+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
497− response:
555+
498− proto: HTTP/2.0
556+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
499− proto_major: 2
557+
500− proto_minor: 0
558+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
501− content_length: -1
559+
502− uncompressed: true
560+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
503− body: |+
561+
504− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
562+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
563+
564+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
565+
566+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Search"},"finish_reason":null}]}
567+
568+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
569+
570+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" func"},"finish_reason":null}]}
571+
572+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
573+
574+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
575+
576+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
577+
578+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" repos"},"finish_reason":null}]}
579+
580+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" using"},"finish_reason":null}]}
581+
582+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
583+
584+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
585+
586+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
587+
588+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Count"},"finish_reason":null}]}
589+
590+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
591+
592+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
593+
594+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
595+
596+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
597+
598+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
599+
600+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
601+
602+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"3"},"finish_reason":null}]}
603+
604+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
605+
606+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
607+
608+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
609+
610+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
611+
612+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
613+
614+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
615+
616+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
617+
618+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
619+
620+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
621+
622+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
623+
624+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
625+
626+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
627+
628+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
629+
630+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"9"},"finish_reason":null}]}
631+
632+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
633+
634+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"10"},"finish_reason":null}]}
635+
636+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
637+
638+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
639+
640+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
641+
642+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
643+
644+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" f"},"finish_reason":null}]}
645+
646+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"12"},"finish_reason":null}]}
647+
648+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
649+
650+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"13"},"finish_reason":null}]}
651+
652+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
653+
654+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
655+
656+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
657+
658+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
659+
660+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
661+
662+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
663+
664+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
665+
666+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"16"},"finish_reason":null}]}
667+
668+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" m"},"finish_reason":null}]}
669+
670+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
671+
672+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
673+
674+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
675+
676+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
677+
678+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"19"},"finish_reason":null}]}
679+
680+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
681+
682+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"20"},"finish_reason":null}]}
683+
684+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
685+
686+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
687+
688+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
689+
690+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"21"},"finish_reason":null}]}
691+
692+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
693+
694+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"22"},"finish_reason":null}]}
695+
696+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
697+
698+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
699+
700+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
701+
702+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
703+
704+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
705+
706+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
707+
708+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" G"},"finish_reason":null}]}
709+
710+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"25"},"finish_reason":null}]}
711+
712+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
713+
714+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"26"},"finish_reason":null}]}
715+
716+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
717+
718+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
719+
720+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
721+
722+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"27"},"finish_reason":null}]}
723+
724+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
725+
726+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"28"},"finish_reason":null}]}
727+
728+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
729+
730+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
731+
732+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
733+
734+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
735+
736+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
737+
738+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"31"},"finish_reason":null}]}
739+
740+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
741+
742+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"32"},"finish_reason":null}]}
743+
744+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
745+
746+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
747+
748+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
749+
750+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"33"},"finish_reason":null}]}
751+
752+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
753+
754+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
755+
756+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" s"},"finish_reason":null}]}
757+
758+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
759+
760+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" i"},"finish_reason":null}]}
761+
762+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
763+
764+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" n"},"finish_reason":null}]}
765+
766+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
767+
768+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
769+
770+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
505
771
506− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
772+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
507
773
508− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
774+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"space"},"finish_reason":null}]}
509
775
510− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
776+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
511
777
512− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
778+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"39"},"finish_reason":null}]}
513
779
514− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
780+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" S"},"finish_reason":null}]}
515
781
516− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
782+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
517
783
518− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
784+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" o"},"finish_reason":null}]}
519
785
520− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Source"},"finish_reason":null}]}
786+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"41"},"finish_reason":null}]}
521
787
522− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"graph"},"finish_reason":null}]}
788+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" u"},"finish_reason":null}]}
523
789
524− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
790+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"42"},"finish_reason":null}]}
525
791
526− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
792+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
527
793
528− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" search"},"finish_reason":null}]}
794+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"43"},"finish_reason":null}]}
529
795
530− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
796+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" c"},"finish_reason":null}]}
531
797
532− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" '"},"finish_reason":null}]}
798+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"44"},"finish_reason":null}]}
533
799
534− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"func"},"finish_reason":null}]}
800+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" e"},"finish_reason":null}]}
535
801
536− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
802+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"45"},"finish_reason":null}]}
537
803
538− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
804+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" g"},"finish_reason":null}]}
539
805
540− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" in"},"finish_reason":null}]}
806+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"46"},"finish_reason":null}]}
541
807
542− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" Go"},"finish_reason":null}]}
808+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" r"},"finish_reason":null}]}
543
809
544− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" repositories"},"finish_reason":null}]}
810+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"47"},"finish_reason":null}]}
545
811
546− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
812+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
547
813
548− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_3lLD5JLl0NhdIrtC52F03cgZ","type":"function","index":0,"function":{"name":"sourcegraph","arguments":""}}]},"finish_reason":null}]}
814+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"48"},"finish_reason":null}]}
549
815
550− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
816+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
551
817
552− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
818+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"49"},"finish_reason":null}]}
553
819
554− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"query\": "}}]},"finish_reason":null}]}
820+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" h"},"finish_reason":null}]}
555
821
556− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"func"}}]},"finish_reason":null}]}
822+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
557
823
558− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" main"}}]},"finish_reason":null}]}
824+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
559
825
560− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" lang"}}]},"finish_reason":null}]}
826+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Exactly"},"finish_reason":null}]}
561
827
562− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":":"}}]},"finish_reason":null}]}
828+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
563
829
564− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Go"}}]},"finish_reason":null}]}
830+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
565
831
566− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
832+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
567
833
568− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
834+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
569
835
570− data: {"id":"chatcmpl-025d8eed69615ae46de3076f","object":"chat.completion.chunk","created":1780069702,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":709,"completion_tokens":37,"total_tokens":7850,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":23},"cost":{"usd":0.0011807900000000001,"hypercredits":0.023615800000000003},"remaining":{"hypercredits":0}}}
836+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
837+
838+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
839+
840+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
841+
842+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
843+
844+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
845+
846+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" colon"},"finish_reason":null}]}
847+
848+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
849+
850+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
851+
852+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
853+
854+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
855+
856+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Search"},"finish_reason":null}]}
857+
858+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
859+
860+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" func"},"finish_reason":null}]}
861+
862+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
863+
864+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
865+
866+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
867+
868+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
869+
870+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" using"},"finish_reason":null}]}
871+
872+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" Source"},"finish_reason":null}]}
873+
874+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"graph"},"finish_reason":null}]}
875+
876+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
877+
878+ data: {"id":"chatcmpl-32c6f75bc431fd458e16ce99","object":"chat.completion.chunk","created":1782413831,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":201,"completion_tokens":404,"total_tokens":605,"completion_tokens_details":{"reasoning_tokens":290},"cost":{"usd":0.00042379600000000005,"hypercredits":0.00847592},"remaining":{"hypercredits":0}}}
571
879
572 data: [DONE]
880 data: [DONE]
573
881
@@ -576,7 +884,7 @@ interactions:
576 - text/event-stream
884 - text/event-stream
577 status: 200 OK
885 status: 200 OK
578 code: 200
886 code: 200
579− duration: 1.04303925s
887+ duration: 1.181730083s
580- id: 2
888- id: 2
581 request:
889 request:
582 proto: HTTP/1.1
890 proto: HTTP/1.1
@@ -598,21 +906,21 @@ interactions:
598 proto_minor: 0
906 proto_minor: 0
599 content_length: -1
907 content_length: -1
600 uncompressed: true
908 uncompressed: true
601− body: '{"data":{"search":{"results":{"matchCount":30,"limitHit":true,"resultCount":30,"approximateResultCount":"30+","missing":[],"timedout":[],"indexUnavailable":false,"results":[{"__typename":"FileMatch","repository":{"name":"github.com/jmbharathram/executeoncommand"},"file":{"path":"go/channel/main.go","url":"/r/github.com/jmbharathram/executeoncommand/-/blob/go/channel/main.go","content":"package main\n\nimport \"fmt\"\n\n// Example 0\nfunc dummy_func() {\n\tfmt.Println(\"dummy_func\")\n}\nfunc main() {\n\tgo dummy_func()\n fmt.Println(\"end of main\")\n}\n\n\n// Example 1\n\npackage main\n\nimport \"fmt\"\n\nfunc dummy_func(ch chan int) {\n // receive a value from channel\n val := \u003c-ch\n\tfmt.Println(val)\n}\nfunc main() {\n // create a channel\n\tch := make(chan int)\n // trigger a parallel go routine\n\tgo dummy_func(ch)\n // send a value into the channel\n\tch \u003c- 10\n}\n\n// Example 2\n\npackage main\n\nimport (\n \"fmt\"\n //\"flag\"\n)\n\nfunc dummy_func(ch chan int) {\n // receive a value from channel\n val := \u003c-ch\n\tfmt.Println(val)\n\n //send a value again\n ch \u003c- val*2\n}\nfunc main() {\n fmt.Println(\"Welcome to main function\")\n \n //flag statements for user input\n var input_value int\n input_value = 10\n //flag.IntVar(\u0026input_value, \"v\", 10, \"Input value to send/receive via channel.\" )\n //flag.Parse()\n\n // create a channel\n\tch := make(chan int)\n\n // trigger a parallel go routine\n\tgo dummy_func(ch)\n \n // send a value into the channel\n\tch \u003c- input_value\n\n // receive a value from channel\n response := \u003c- ch\n fmt.Println(response)\n\n}\n\n// example 3\n\n\npackage main\n\nimport(\n\"fmt\"\n\"time\"\n\"math/rand\"\n)\n\nfunc routine1(ch chan int, min int, max int) {\n\n rand.Seed(time.Now().UnixNano())\n t := rand.Intn(max - min) + min\n fmt.Println(\"routine 1 is waiting: \", t, \"secs\")\n time.Sleep(time.Duration(t)*time.Second)\n\n ch \u003c- t\n}\n\nfunc routine2(ch chan int, min int, max int) {\n\n rand.Seed(time.Now().UnixNano())\n t := rand.Intn(max - min) + min\n fmt.Println(\"routine 2 is waiting: \", t, \"secs\")\n time.Sleep(time.Duration(t)*time.Second)\n\n ch \u003c- t\n}\n\nfunc main(){\n\nmin := 1\nmax := 10\n\nch1:= make(chan int)\nch2:= make(chan int)\n\ngo routine1(ch1, min, max)\ngo routine2(ch2, min, max)\n\nselect{\n\ncase \u003c- ch1:\n fmt.Println(\"routine 1 finished\")\n\ncase \u003c- ch2:\n fmt.Println(\"routine 2 finished\")\n}\n\nfmt.Println(\"end of main function\")\n\n}\n"},"lineMatches":[{"preview":"func main(){","lineNumber":106,"offsetAndLengths":[[0,9]]},{"preview":"func dummy_func() {","lineNumber":5,"offsetAndLengths":[[0,4],[11,4]]},{"preview":"\tfmt.Println(\"dummy_func\")","lineNumber":6,"offsetAndLengths":[[20,4]]},{"preview":"func main() {","lineNumber":8,"offsetAndLengths":[[0,9]]},{"preview":"\tgo dummy_func()","lineNumber":9,"offsetAndLengths":[[10,4]]},{"preview":" fmt.Println(\"end of main\")","lineNumber":10,"offsetAndLengths":[[24,4]]},{"preview":"func main() {","lineNumber":25,"offsetAndLengths":[[0,9]]},{"preview":"func main() {","lineNumber":51,"offsetAndLengths":[[0,9]]},{"preview":" fmt.Println(\"Welcome to main function\")","lineNumber":52,"offsetAndLengths":[[28,4],[33,4]]},{"preview":"fmt.Println(\"end of main function\")","lineNumber":126,"offsetAndLengths":[[20,4],[25,4]]},{"preview":"package main","lineNumber":78,"offsetAndLengths":[[8,4]]},{"preview":"package main","lineNumber":16,"offsetAndLengths":[[8,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"package main","lineNumber":36,"offsetAndLengths":[[8,4]]},{"preview":"func dummy_func(ch chan int) {","lineNumber":20,"offsetAndLengths":[[0,4],[11,4]]},{"preview":"func dummy_func(ch chan int) {","lineNumber":43,"offsetAndLengths":[[0,4],[11,4]]},{"preview":"\tgo dummy_func(ch)","lineNumber":64,"offsetAndLengths":[[10,4]]},{"preview":"\tgo dummy_func(ch)","lineNumber":29,"offsetAndLengths":[[10,4]]},{"preview":"func routine1(ch chan int, min int, max int) {","lineNumber":86,"offsetAndLengths":[[0,4]]},{"preview":"func routine2(ch chan int, min int, max int) {","lineNumber":96,"offsetAndLengths":[[0,4]]}]},{"__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]]}]}]}}}}'
909+ body: '{"data":{"search":{"results":{"matchCount":30,"limitHit":true,"resultCount":30,"approximateResultCount":"30+","missing":[],"timedout":[],"indexUnavailable":false,"results":[{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"14-Logging/03-LogToFile/main.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/14-Logging/03-LogToFile/main.go","content":"package main\n\nimport (\n\t\"logToFile/core\"\n\n\t\"github.com/pkg/errors\"\n)\n\ntype myStruct struct {\n\tName string\n}\n\nvar logger = core.NewFileLogger()\n\nfunc main() {\n\n\tlogger.Print(\"test\")\n\tmyStruct := myStruct{Name: \"test\"}\n\tlogger.Info().Interface(\"Body\", myStruct).Str(\"Category\", \"Search\").\n\t\tInt(\"DurationTime\", 80).\n\t\tMsg(\"Searching for a thing\")\n\n\terr := errors.New(\"this is an error\")\n\n\tlogger.Error().Err(err).Msg(\"Error occurred\")\n\n\terr = func3()\n\tif err != nil {\n\n\t\tlogger.Error().Stack().Err(err).Msg(\"Error occurred (func3 error)\")\n\t}\n}\n\nfunc func1() error {\n\treturn errors.New(\"this is an error (func1)\")\n}\n\nfunc func2() error {\n\terr := func1()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\nfunc func3() error {\n\terr := func2()\n\tif err != nil {\n\t\treturn err\n\t}\n\treturn nil\n}\n\n// trace\n// debug\n// info\n// warn\n// error\n// fatal(critical)\n// panic\n"},"lineMatches":[{"preview":"func main() {","lineNumber":14,"offsetAndLengths":[[0,9]]},{"preview":"func func1() error {","lineNumber":33,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\treturn errors.New(\"this is an error (func1)\")","lineNumber":34,"offsetAndLengths":[[38,4]]},{"preview":"func func2() error {","lineNumber":37,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\terr := func1()","lineNumber":38,"offsetAndLengths":[[8,4]]},{"preview":"func func3() error {","lineNumber":45,"offsetAndLengths":[[0,4],[5,4]]},{"preview":"\terr := func2()","lineNumber":46,"offsetAndLengths":[[8,4]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\terr = func3()","lineNumber":26,"offsetAndLengths":[[7,4]]},{"preview":"\t\tlogger.Error().Stack().Err(err).Msg(\"Error occurred (func3 error)\")","lineNumber":29,"offsetAndLengths":[[55,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"02-Introduction/03-ProjectStructure/helloWorldInFunc.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/02-Introduction/03-ProjectStructure/helloWorldInFunc.go","content":"package main\n\nimport \"fmt\"\n\nfunc main() {\n\thello()\n}\n\nfunc hello() {\n\tfmt.Println(\"Hello, World!\")\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"func hello() {","lineNumber":8,"offsetAndLengths":[[0,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"08-Function/05-Anonymous/example2.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/05-Anonymous/example2.go","content":"package main\n\nimport (\n\t\"fmt\"\n\t\"sort\"\n)\n\nfunc main() {\n\n\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\n\n\tfmt.Printf(\"%v\\n\", numbers)\n\n\tsortingFunc := func(i, j int) bool {\n\t\treturn numbers[i] \u003c numbers[j]\n\t}\n\tsort.Slice(numbers, sortingFunc)\n\n\tfmt.Printf(\"%v\\n\", numbers)\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":7,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\tsortingFunc := func(i, j int) bool {","lineNumber":13,"offsetAndLengths":[[8,4],[16,4]]},{"preview":"\tsort.Slice(numbers, sortingFunc)","lineNumber":16,"offsetAndLengths":[[28,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"15-Concurrency/03-Intro/main.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/15-Concurrency/03-Intro/main.go","content":"package main\n\nimport (\n\t\"runtime\"\n\t\"time\"\n)\n\nfunc main() {\n\truntime.GOMAXPROCS(runtime.NumCPU())\n\tvalue := 0\n\tgo task1() \n\tgo task2()\n\tgo task3()\n\n\tgo func() {\n\t\t// lock\n\t\tvalue++ //1\n\t\t//unlock\n\t}()\n\tgo func() {\n\t\t// lock\n\t\tvalue+=2 // 3\n\t\t//unlock\n\t}()\n\tgo func() {\n\t\t// lock\n\t\tvalue+=3 // 6\n\t\t//unlock\n\t}()\n\n\tprintln(value)\n\n\ttime.Sleep(time.Second)\n}\n\nfunc task1() {\n\tprintln(\"task1\")\n}\n\nfunc task2() {\n\tprintln(\"task2\")\n}\n\nfunc task3() {\n\tprintln(\"task3\")\n}\n\n// race condition\n//await"},"lineMatches":[{"preview":"func main() {","lineNumber":7,"offsetAndLengths":[[0,9]]},{"preview":"package main","lineNumber":0,"offsetAndLengths":[[8,4]]},{"preview":"\tgo func() {","lineNumber":14,"offsetAndLengths":[[4,4]]},{"preview":"\tgo func() {","lineNumber":19,"offsetAndLengths":[[4,4]]},{"preview":"\tgo func() {","lineNumber":24,"offsetAndLengths":[[4,4]]},{"preview":"func task1() {","lineNumber":35,"offsetAndLengths":[[0,4]]},{"preview":"func task2() {","lineNumber":39,"offsetAndLengths":[[0,4]]},{"preview":"func task3() {","lineNumber":43,"offsetAndLengths":[[0,4]]}]},{"__typename":"FileMatch","repository":{"name":"github.com/naeemaei/Golang-Tutorial"},"file":{"path":"08-Function/04-Variadic/example2.go","url":"/r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/04-Variadic/example2.go","content":"package main\n\nimport \"fmt\"\n\nfunc main() {\n\tPrintLog(\"Ali\", 1, \"Reza\", 3, \"Error\", 5, 6, \"Info\", 8, 9, false)\n\n}\n\nfunc PrintLog(logs ...interface{}) {\n\tfor i, item := range logs {\n\t\tfmt.Printf(\"%d: %v\\n\", i, item)\n\t}\n}\n"},"lineMatches":[{"preview":"func main() {","lineNumber":4,"offsetAndLengths":[[0,9]]}]}]}}}}'
602 headers:
910 headers:
603 Content-Type:
911 Content-Type:
604 - application/json
912 - application/json
605 status: 200 OK
913 status: 200 OK
606 code: 200
914 code: 200
607− duration: 1.390620583s
915+ duration: 2.192433792s
608- id: 3
916- id: 3
609 request:
917 request:
610 proto: HTTP/1.1
918 proto: HTTP/1.1
611 proto_major: 1
919 proto_major: 1
612 proto_minor: 1
920 proto_minor: 1
613− content_length: 44423
921+ content_length: 46395
614 host: ""
922 host: ""
615− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_3lLD5JLl0NhdIrtC52F03cgZ\",\"function\":{\"arguments\":\"{\\\"query\\\": \\\"func main lang:Go\\\"}\",\"name\":\"sourcegraph\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"The user wants me to use the Sourcegraph tool to search for 'func main' in Go repositories.\"},{\"content\":\"# Sourcegraph Search Results\\n\\nFound 30 matches across 30 results\\n(Result limit reached, try a more specific query)\\n\\n## Result 1: github.com/jmbharathram/executeoncommand/go/channel/main.go\\n\\nURL: /r/github.com/jmbharathram/executeoncommand/-/blob/go/channel/main.go\\n\\n```\\n96| \\n97| func routine2(ch chan int, min int, max int) {\\n98| \\n99| rand.Seed(time.Now().UnixNano())\\n100| t := rand.Intn(max - min) + min\\n101| fmt.Println(\\\"routine 2 is waiting: \\\", t, \\\"secs\\\")\\n102| time.Sleep(time.Duration(t)*time.Second)\\n103| \\n104| ch <- t\\n105| }\\n106| func main(){\\n107| func main(){\\n108| \\n109| min := 1\\n110| max := 10\\n111| \\n112| ch1:= make(chan int)\\n113| ch2:= make(chan int)\\n114| \\n115| go routine1(ch1, min, max)\\n116| go routine2(ch2, min, max)\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func dummy_func() {\\n6| func dummy_func() {\\n7| \\tfmt.Println(\\\"dummy_func\\\")\\n8| }\\n9| func main() {\\n10| \\tgo dummy_func()\\n11| fmt.Println(\\\"end of main\\\")\\n12| }\\n13| \\n14| \\n15| // Example 1\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| // Example 0\\n6| \\tfmt.Println(\\\"dummy_func\\\")\\n7| \\tfmt.Println(\\\"dummy_func\\\")\\n8| }\\n9| func main() {\\n10| \\tgo dummy_func()\\n11| fmt.Println(\\\"end of main\\\")\\n12| }\\n13| \\n14| \\n15| // Example 1\\n16| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| // Example 0\\n6| func dummy_func() {\\n7| \\tfmt.Println(\\\"dummy_func\\\")\\n8| func main() {\\n9| func main() {\\n10| \\tgo dummy_func()\\n11| fmt.Println(\\\"end of main\\\")\\n12| }\\n13| \\n14| \\n15| // Example 1\\n16| \\n17| package main\\n18| \\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| // Example 0\\n6| func dummy_func() {\\n7| \\tfmt.Println(\\\"dummy_func\\\")\\n8| }\\n9| \\tgo dummy_func()\\n10| \\tgo dummy_func()\\n11| fmt.Println(\\\"end of main\\\")\\n12| }\\n13| \\n14| \\n15| // Example 1\\n16| \\n17| package main\\n18| \\n19| import \\\"fmt\\\"\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| // Example 0\\n6| func dummy_func() {\\n7| \\tfmt.Println(\\\"dummy_func\\\")\\n8| }\\n9| func main() {\\n10| fmt.Println(\\\"end of main\\\")\\n11| fmt.Println(\\\"end of main\\\")\\n12| }\\n13| \\n14| \\n15| // Example 1\\n16| \\n17| package main\\n18| \\n19| import \\\"fmt\\\"\\n20| \\n```\\n\\n```\\n15| // Example 1\\n16| \\n17| package main\\n18| \\n19| import \\\"fmt\\\"\\n20| \\n21| func dummy_func(ch chan int) {\\n22| // receive a value from channel\\n23| val := <-ch\\n24| \\tfmt.Println(val)\\n25| func main() {\\n26| func main() {\\n27| // create a channel\\n28| \\tch := make(chan int)\\n29| // trigger a parallel go routine\\n30| \\tgo dummy_func(ch)\\n31| // send a value into the channel\\n32| \\tch <- 10\\n33| }\\n34| \\n35| // Example 2\\n```\\n\\n```\\n41| //\\\"flag\\\"\\n42| )\\n43| \\n44| func dummy_func(ch chan int) {\\n45| // receive a value from channel\\n46| val := <-ch\\n47| \\tfmt.Println(val)\\n48| \\n49| //send a value again\\n50| ch <- val*2\\n51| func main() {\\n52| func main() {\\n53| fmt.Println(\\\"Welcome to main function\\\")\\n54| \\n55| //flag statements for user input\\n56| var input_value int\\n57| input_value = 10\\n58| //flag.IntVar(&input_value, \\\"v\\\", 10, \\\"Input value to send/receive via channel.\\\" )\\n59| //flag.Parse()\\n60| \\n61| // create a channel\\n```\\n\\n```\\n42| )\\n43| \\n44| func dummy_func(ch chan int) {\\n45| // receive a value from channel\\n46| val := <-ch\\n47| \\tfmt.Println(val)\\n48| \\n49| //send a value again\\n50| ch <- val*2\\n51| }\\n52| fmt.Println(\\\"Welcome to main function\\\")\\n53| fmt.Println(\\\"Welcome to main function\\\")\\n54| \\n55| //flag statements for user input\\n56| var input_value int\\n57| input_value = 10\\n58| //flag.IntVar(&input_value, \\\"v\\\", 10, \\\"Input value to send/receive via channel.\\\" )\\n59| //flag.Parse()\\n60| \\n61| // create a channel\\n62| \\tch := make(chan int)\\n```\\n\\n```\\n116| go routine2(ch2, min, max)\\n117| \\n118| select{\\n119| \\n120| case <- ch1:\\n121| fmt.Println(\\\"routine 1 finished\\\")\\n122| \\n123| case <- ch2:\\n124| fmt.Println(\\\"routine 2 finished\\\")\\n125| }\\n126| fmt.Println(\\\"end of main function\\\")\\n127| fmt.Println(\\\"end of main function\\\")\\n128| \\n129| }\\n130| \\n```\\n\\n```\\n68| \\tch <- input_value\\n69| \\n70| // receive a value from channel\\n71| response := <- ch\\n72| fmt.Println(response)\\n73| \\n74| }\\n75| \\n76| // example 3\\n77| \\n78| package main\\n79| package main\\n80| \\n81| import(\\n82| \\\"fmt\\\"\\n83| \\\"time\\\"\\n84| \\\"math/rand\\\"\\n85| )\\n86| \\n87| func routine1(ch chan int, min int, max int) {\\n88| \\n```\\n\\n```\\n6| func dummy_func() {\\n7| \\tfmt.Println(\\\"dummy_func\\\")\\n8| }\\n9| func main() {\\n10| \\tgo dummy_func()\\n11| fmt.Println(\\\"end of main\\\")\\n12| }\\n13| \\n14| \\n15| // Example 1\\n16| package main\\n17| package main\\n18| \\n19| import \\\"fmt\\\"\\n20| \\n21| func dummy_func(ch chan int) {\\n22| // receive a value from channel\\n23| val := <-ch\\n24| \\tfmt.Println(val)\\n25| }\\n26| func main() {\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| // Example 0\\n6| func dummy_func() {\\n7| \\tfmt.Println(\\\"dummy_func\\\")\\n8| }\\n9| func main() {\\n10| \\tgo dummy_func()\\n```\\n\\n```\\n26| func main() {\\n27| // create a channel\\n28| \\tch := make(chan int)\\n29| // trigger a parallel go routine\\n30| \\tgo dummy_func(ch)\\n31| // send a value into the channel\\n32| \\tch <- 10\\n33| }\\n34| \\n35| // Example 2\\n36| package main\\n37| package main\\n38| \\n39| import (\\n40| \\\"fmt\\\"\\n41| //\\\"flag\\\"\\n42| )\\n43| \\n44| func dummy_func(ch chan int) {\\n45| // receive a value from channel\\n46| val := <-ch\\n```\\n\\n```\\n10| \\tgo dummy_func()\\n11| fmt.Println(\\\"end of main\\\")\\n12| }\\n13| \\n14| \\n15| // Example 1\\n16| \\n17| package main\\n18| \\n19| import \\\"fmt\\\"\\n20| func dummy_func(ch chan int) {\\n21| func dummy_func(ch chan int) {\\n22| // receive a value from channel\\n23| val := <-ch\\n24| \\tfmt.Println(val)\\n25| }\\n26| func main() {\\n27| // create a channel\\n28| \\tch := make(chan int)\\n29| // trigger a parallel go routine\\n30| \\tgo dummy_func(ch)\\n```\\n\\n```\\n33| }\\n34| \\n35| // Example 2\\n36| \\n37| package main\\n38| \\n39| import (\\n40| \\\"fmt\\\"\\n41| //\\\"flag\\\"\\n42| )\\n43| func dummy_func(ch chan int) {\\n44| func dummy_func(ch chan int) {\\n45| // receive a value from channel\\n46| val := <-ch\\n47| \\tfmt.Println(val)\\n48| \\n49| //send a value again\\n50| ch <- val*2\\n51| }\\n52| func main() {\\n53| fmt.Println(\\\"Welcome to main function\\\")\\n```\\n\\n```\\n54| \\n55| //flag statements for user input\\n56| var input_value int\\n57| input_value = 10\\n58| //flag.IntVar(&input_value, \\\"v\\\", 10, \\\"Input value to send/receive via channel.\\\" )\\n59| //flag.Parse()\\n60| \\n61| // create a channel\\n62| \\tch := make(chan int)\\n63| \\n64| \\tgo dummy_func(ch)\\n65| \\tgo dummy_func(ch)\\n66| \\n67| // send a value into the channel\\n68| \\tch <- input_value\\n69| \\n70| // receive a value from channel\\n71| response := <- ch\\n72| fmt.Println(response)\\n73| \\n74| }\\n```\\n\\n```\\n19| import \\\"fmt\\\"\\n20| \\n21| func dummy_func(ch chan int) {\\n22| // receive a value from channel\\n23| val := <-ch\\n24| \\tfmt.Println(val)\\n25| }\\n26| func main() {\\n27| // create a channel\\n28| \\tch := make(chan int)\\n29| \\tgo dummy_func(ch)\\n30| \\tgo dummy_func(ch)\\n31| // send a value into the channel\\n32| \\tch <- 10\\n33| }\\n34| \\n35| // Example 2\\n36| \\n37| package main\\n38| \\n39| import (\\n```\\n\\n```\\n76| // example 3\\n77| \\n78| \\n79| package main\\n80| \\n81| import(\\n82| \\\"fmt\\\"\\n83| \\\"time\\\"\\n84| \\\"math/rand\\\"\\n85| )\\n86| func routine1(ch chan int, min int, max int) {\\n87| func routine1(ch chan int, min int, max int) {\\n88| \\n89| rand.Seed(time.Now().UnixNano())\\n90| t := rand.Intn(max - min) + min\\n91| fmt.Println(\\\"routine 1 is waiting: \\\", t, \\\"secs\\\")\\n92| time.Sleep(time.Duration(t)*time.Second)\\n93| \\n94| ch <- t\\n95| }\\n96| \\n```\\n\\n```\\n86| \\n87| func routine1(ch chan int, min int, max int) {\\n88| \\n89| rand.Seed(time.Now().UnixNano())\\n90| t := rand.Intn(max - min) + min\\n91| fmt.Println(\\\"routine 1 is waiting: \\\", t, \\\"secs\\\")\\n92| time.Sleep(time.Duration(t)*time.Second)\\n93| \\n94| ch <- t\\n95| }\\n96| func routine2(ch chan int, min int, max int) {\\n97| func routine2(ch chan int, min int, max int) {\\n98| \\n99| rand.Seed(time.Now().UnixNano())\\n100| t := rand.Intn(max - min) + min\\n101| fmt.Println(\\\"routine 2 is waiting: \\\", t, \\\"secs\\\")\\n102| time.Sleep(time.Duration(t)*time.Second)\\n103| \\n104| ch <- t\\n105| }\\n106| \\n```\\n\\n## Result 2: 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 3: 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\",\"tool_call_id\":\"call_3lLD5JLl0NhdIrtC52F03cgZ\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
923+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/sourcegraph_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use sourcegraph to search for 'func main' in Go repositories\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_ed4abf0a0b9be3a4\",\"function\":{\"arguments\":\"{\\\"count\\\": 20, \\\"query\\\": \\\"func main lang:Go\\\"}\",\"name\":\"sourcegraph\"},\"type\":\"function\"}],\"role\":\"assistant\"},{\"content\":\"# Sourcegraph Search Results\\n\\nFound 30 matches across 30 results\\n(Result limit reached, try a more specific query)\\n\\n## Result 1: github.com/naeemaei/Golang-Tutorial/14-Logging/03-LogToFile/main.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/14-Logging/03-LogToFile/main.go\\n\\n```\\n4| \\t\\\"logToFile/core\\\"\\n5| \\n6| \\t\\\"github.com/pkg/errors\\\"\\n7| )\\n8| \\n9| type myStruct struct {\\n10| \\tName string\\n11| }\\n12| \\n13| var logger = core.NewFileLogger()\\n14| func main() {\\n15| func main() {\\n16| \\n17| \\tlogger.Print(\\\"test\\\")\\n18| \\tmyStruct := myStruct{Name: \\\"test\\\"}\\n19| \\tlogger.Info().Interface(\\\"Body\\\", myStruct).Str(\\\"Category\\\", \\\"Search\\\").\\n20| \\t\\tInt(\\\"DurationTime\\\", 80).\\n21| \\t\\tMsg(\\\"Searching for a thing\\\")\\n22| \\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n```\\n\\n```\\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| func func1() error {\\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n```\\n\\n```\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n```\\n\\n```\\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| func func2() error {\\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| \\n46| func func3() error {\\n47| \\terr := func2()\\n```\\n\\n```\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| \\terr := func1()\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| \\n46| func func3() error {\\n47| \\terr := func2()\\n48| \\tif err != nil {\\n```\\n\\n```\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| func func3() error {\\n46| func func3() error {\\n47| \\terr := func2()\\n48| \\tif err != nil {\\n49| \\t\\treturn err\\n50| \\t}\\n51| \\treturn nil\\n52| }\\n53| \\n54| // trace\\n55| // debug\\n```\\n\\n```\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n40| \\tif err != nil {\\n41| \\t\\treturn err\\n42| \\t}\\n43| \\treturn nil\\n44| }\\n45| \\n46| \\terr := func2()\\n47| \\terr := func2()\\n48| \\tif err != nil {\\n49| \\t\\treturn err\\n50| \\t}\\n51| \\treturn nil\\n52| }\\n53| \\n54| // trace\\n55| // debug\\n56| // info\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"logToFile/core\\\"\\n5| \\n6| \\t\\\"github.com/pkg/errors\\\"\\n7| )\\n8| \\n9| type myStruct struct {\\n10| \\tName string\\n```\\n\\n```\\n16| \\n17| \\tlogger.Print(\\\"test\\\")\\n18| \\tmyStruct := myStruct{Name: \\\"test\\\"}\\n19| \\tlogger.Info().Interface(\\\"Body\\\", myStruct).Str(\\\"Category\\\", \\\"Search\\\").\\n20| \\t\\tInt(\\\"DurationTime\\\", 80).\\n21| \\t\\tMsg(\\\"Searching for a thing\\\")\\n22| \\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\terr = func3()\\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n```\\n\\n```\\n19| \\tlogger.Info().Interface(\\\"Body\\\", myStruct).Str(\\\"Category\\\", \\\"Search\\\").\\n20| \\t\\tInt(\\\"DurationTime\\\", 80).\\n21| \\t\\tMsg(\\\"Searching for a thing\\\")\\n22| \\n23| \\terr := errors.New(\\\"this is an error\\\")\\n24| \\n25| \\tlogger.Error().Err(err).Msg(\\\"Error occurred\\\")\\n26| \\n27| \\terr = func3()\\n28| \\tif err != nil {\\n29| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n30| \\t\\tlogger.Error().Stack().Err(err).Msg(\\\"Error occurred (func3 error)\\\")\\n31| \\t}\\n32| }\\n33| \\n34| func func1() error {\\n35| \\treturn errors.New(\\\"this is an error (func1)\\\")\\n36| }\\n37| \\n38| func func2() error {\\n39| \\terr := func1()\\n```\\n\\n## Result 2: github.com/naeemaei/Golang-Tutorial/02-Introduction/03-ProjectStructure/helloWorldInFunc.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/02-Introduction/03-ProjectStructure/helloWorldInFunc.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func main() {\\n5| func main() {\\n6| \\thello()\\n7| }\\n8| \\n9| func hello() {\\n10| \\tfmt.Println(\\\"Hello, World!\\\")\\n11| }\\n12| \\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\thello()\\n7| }\\n8| \\n9| func hello() {\\n10| \\tfmt.Println(\\\"Hello, World!\\\")\\n```\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| \\n5| func main() {\\n6| \\thello()\\n7| }\\n8| func hello() {\\n9| func hello() {\\n10| \\tfmt.Println(\\\"Hello, World!\\\")\\n11| }\\n12| \\n```\\n\\n## Result 3: github.com/naeemaei/Golang-Tutorial/08-Function/05-Anonymous/example2.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/05-Anonymous/example2.go\\n\\n```\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"fmt\\\"\\n5| \\t\\\"sort\\\"\\n6| )\\n7| func main() {\\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n11| \\n12| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n13| \\n14| \\tsortingFunc := func(i, j int) bool {\\n15| \\t\\treturn numbers[i] < numbers[j]\\n16| \\t}\\n17| \\tsort.Slice(numbers, sortingFunc)\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"fmt\\\"\\n5| \\t\\\"sort\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n```\\n\\n```\\n3| import (\\n4| \\t\\\"fmt\\\"\\n5| \\t\\\"sort\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n11| \\n12| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n13| \\tsortingFunc := func(i, j int) bool {\\n14| \\tsortingFunc := func(i, j int) bool {\\n15| \\t\\treturn numbers[i] < numbers[j]\\n16| \\t}\\n17| \\tsort.Slice(numbers, sortingFunc)\\n18| \\n19| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n20| }\\n21| \\n```\\n\\n```\\n6| )\\n7| \\n8| func main() {\\n9| \\n10| \\tnumbers := []int{12, 5, 48, 32, 1, 2, 74, 36, 90, 100, 95, 42}\\n11| \\n12| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n13| \\n14| \\tsortingFunc := func(i, j int) bool {\\n15| \\t\\treturn numbers[i] < numbers[j]\\n16| \\tsort.Slice(numbers, sortingFunc)\\n17| \\tsort.Slice(numbers, sortingFunc)\\n18| \\n19| \\tfmt.Printf(\\\"%v\\\\n\\\", numbers)\\n20| }\\n21| \\n```\\n\\n## Result 4: github.com/naeemaei/Golang-Tutorial/15-Concurrency/03-Intro/main.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/15-Concurrency/03-Intro/main.go\\n\\n```\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"runtime\\\"\\n5| \\t\\\"time\\\"\\n6| )\\n7| func main() {\\n8| func main() {\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n11| \\tgo task1() \\n12| \\tgo task2()\\n13| \\tgo task3()\\n14| \\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n```\\n\\n```\\n0| package main\\n1| package main\\n2| \\n3| import (\\n4| \\t\\\"runtime\\\"\\n5| \\t\\\"time\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n```\\n\\n```\\n4| \\t\\\"runtime\\\"\\n5| \\t\\\"time\\\"\\n6| )\\n7| \\n8| func main() {\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n11| \\tgo task1() \\n12| \\tgo task2()\\n13| \\tgo task3()\\n14| \\tgo func() {\\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n18| \\t\\t//unlock\\n19| \\t}()\\n20| \\tgo func() {\\n21| \\t\\t// lock\\n22| \\t\\tvalue+=2 // 3\\n23| \\t\\t//unlock\\n24| \\t}()\\n```\\n\\n```\\n9| \\truntime.GOMAXPROCS(runtime.NumCPU())\\n10| \\tvalue := 0\\n11| \\tgo task1() \\n12| \\tgo task2()\\n13| \\tgo task3()\\n14| \\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n18| \\t\\t//unlock\\n19| \\tgo func() {\\n20| \\tgo func() {\\n21| \\t\\t// lock\\n22| \\t\\tvalue+=2 // 3\\n23| \\t\\t//unlock\\n24| \\t}()\\n25| \\tgo func() {\\n26| \\t\\t// lock\\n27| \\t\\tvalue+=3 // 6\\n28| \\t\\t//unlock\\n29| \\t}()\\n```\\n\\n```\\n14| \\n15| \\tgo func() {\\n16| \\t\\t// lock\\n17| \\t\\tvalue++ //1\\n18| \\t\\t//unlock\\n19| \\t}()\\n20| \\tgo func() {\\n21| \\t\\t// lock\\n22| \\t\\tvalue+=2 // 3\\n23| \\t\\t//unlock\\n24| \\tgo func() {\\n25| \\tgo func() {\\n26| \\t\\t// lock\\n27| \\t\\tvalue+=3 // 6\\n28| \\t\\t//unlock\\n29| \\t}()\\n30| \\n31| \\tprintln(value)\\n32| \\n33| \\ttime.Sleep(time.Second)\\n34| }\\n```\\n\\n```\\n25| \\tgo func() {\\n26| \\t\\t// lock\\n27| \\t\\tvalue+=3 // 6\\n28| \\t\\t//unlock\\n29| \\t}()\\n30| \\n31| \\tprintln(value)\\n32| \\n33| \\ttime.Sleep(time.Second)\\n34| }\\n35| func task1() {\\n36| func task1() {\\n37| \\tprintln(\\\"task1\\\")\\n38| }\\n39| \\n40| func task2() {\\n41| \\tprintln(\\\"task2\\\")\\n42| }\\n43| \\n44| func task3() {\\n45| \\tprintln(\\\"task3\\\")\\n```\\n\\n```\\n29| \\t}()\\n30| \\n31| \\tprintln(value)\\n32| \\n33| \\ttime.Sleep(time.Second)\\n34| }\\n35| \\n36| func task1() {\\n37| \\tprintln(\\\"task1\\\")\\n38| }\\n39| func task2() {\\n40| func task2() {\\n41| \\tprintln(\\\"task2\\\")\\n42| }\\n43| \\n44| func task3() {\\n45| \\tprintln(\\\"task3\\\")\\n46| }\\n47| \\n48| // race condition\\n49| //await\\n```\\n\\n```\\n33| \\ttime.Sleep(time.Second)\\n34| }\\n35| \\n36| func task1() {\\n37| \\tprintln(\\\"task1\\\")\\n38| }\\n39| \\n40| func task2() {\\n41| \\tprintln(\\\"task2\\\")\\n42| }\\n43| func task3() {\\n44| func task3() {\\n45| \\tprintln(\\\"task3\\\")\\n46| }\\n47| \\n48| // race condition\\n49| //await\\n```\\n\\n## Result 5: github.com/naeemaei/Golang-Tutorial/08-Function/04-Variadic/example2.go\\n\\nURL: /r/github.com/naeemaei/Golang-Tutorial/-/blob/08-Function/04-Variadic/example2.go\\n\\n```\\n1| package main\\n2| \\n3| import \\\"fmt\\\"\\n4| func main() {\\n5| func main() {\\n6| \\tPrintLog(\\\"Ali\\\", 1, \\\"Reza\\\", 3, \\\"Error\\\", 5, 6, \\\"Info\\\", 8, 9, false)\\n7| \\n8| }\\n9| \\n10| func PrintLog(logs ...interface{}) {\\n11| \\tfor i, item := range logs {\\n12| \\t\\tfmt.Printf(\\\"%d: %v\\\\n\\\", i, item)\\n13| \\t}\\n14| }\\n```\\n\\n\",\"tool_call_id\":\"call_ed4abf0a0b9be3a4\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
616 headers:
924 headers:
617 Accept:
925 Accept:
618 - application/json
926 - application/json
@@ -629,203 +937,537 @@ interactions:
629 content_length: -1
937 content_length: -1
630 uncompressed: true
938 uncompressed: true
631 body: |+
939 body: |+
632− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
940+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
941+
942+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
943+
944+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
945+
946+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
947+
948+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" matches"},"finish_reason":null}]}
949+
950+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" across"},"finish_reason":null}]}
951+
952+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
953+
954+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
955+
956+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Go"},"finish_reason":null}]}
957+
958+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repositories"},"finish_reason":null}]}
959+
960+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
961+
962+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Here"},"finish_reason":null}]}
963+
964+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"'s"},"finish_reason":null}]}
965+
966+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
967+
968+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" summary"},"finish_reason":null}]}
969+
970+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" of"},"finish_reason":null}]}
971+
972+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
973+
974+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" top"},"finish_reason":null}]}
975+
976+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
977+
978+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null}]}
979+
980+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
981+
982+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" #"},"finish_reason":null}]}
983+
984+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
985+
986+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Repository"},"finish_reason":null}]}
987+
988+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
989+
990+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" File"},"finish_reason":null}]}
991+
992+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
993+
994+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Sn"},"finish_reason":null}]}
995+
996+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ippet"},"finish_reason":null}]}
997+
998+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
999+
1000+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1001+
1002+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"---"},"finish_reason":null}]}
1003+
1004+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1005+
1006+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-----------"},"finish_reason":null}]}
1007+
1008+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1009+
1010+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"------"},"finish_reason":null}]}
1011+
1012+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1013+
1014+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"---------"},"finish_reason":null}]}
1015+
1016+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|\n"},"finish_reason":null}]}
1017+
1018+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1019+
1020+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1021+
1022+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"1"},"finish_reason":null}]}
1023+
1024+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1025+
1026+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1027+
1028+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
1029+
1030+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
1031+
1032+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
1033+
1034+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
1035+
1036+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
1037+
1038+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1039+
1040+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1041+
1042+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
1043+
1044+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
1045+
1046+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1047+
1048+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1049+
1050+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1051+
1052+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"14"},"finish_reason":null}]}
1053+
1054+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1055+
1056+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Logging"},"finish_reason":null}]}
1057+
1058+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1059+
1060+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03"},"finish_reason":null}]}
1061+
1062+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1063+
1064+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Log"},"finish_reason":null}]}
1065+
1066+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ToFile"},"finish_reason":null}]}
1067+
1068+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
1069+
1070+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1071+
1072+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1073+
1074+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1075+
1076+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Logger"},"finish_reason":null}]}
1077+
1078+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" setup"},"finish_reason":null}]}
1079+
1080+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
1081+
1082+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" zer"},"finish_reason":null}]}
1083+
1084+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olog"},"finish_reason":null}]}
1085+
1086+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1087+
1088+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" error"},"finish_reason":null}]}
1089+
1090+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" handling"},"finish_reason":null}]}
1091+
1092+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
1093+
1094+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1095+
1096+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1097+
1098+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
1099+
1100+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1101+
1102+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1103+
1104+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
1105+
1106+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
1107+
1108+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
1109+
1110+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
1111+
1112+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
1113+
1114+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1115+
1116+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1117+
1118+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
1119+
1120+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
1121+
1122+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1123+
1124+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1125+
1126+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1127+
1128+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"02"},"finish_reason":null}]}
1129+
1130+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1131+
1132+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Introduction"},"finish_reason":null}]}
1133+
1134+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1135+
1136+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03"},"finish_reason":null}]}
1137+
1138+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1139+
1140+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Project"},"finish_reason":null}]}
1141+
1142+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Structure"},"finish_reason":null}]}
1143+
1144+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/h"},"finish_reason":null}]}
1145+
1146+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ello"},"finish_reason":null}]}
1147+
1148+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"World"},"finish_reason":null}]}
1149+
1150+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"In"},"finish_reason":null}]}
1151+
1152+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Func"},"finish_reason":null}]}
1153+
1154+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1155+
1156+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1157+
1158+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1159+
1160+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Simple"},"finish_reason":null}]}
1161+
1162+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
1163+
1164+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" world"},"finish_reason":null}]}
1165+
1166+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" in"},"finish_reason":null}]}
1167+
1168+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
1169+
1170+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
1171+
1172+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
1173+
1174+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1175+
1176+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1177+
1178+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"3"},"finish_reason":null}]}
1179+
1180+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1181+
1182+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1183+
1184+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
1185+
1186+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
1187+
1188+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
1189+
1190+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
1191+
1192+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
1193+
1194+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1195+
1196+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1197+
1198+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
1199+
1200+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
1201+
1202+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1203+
1204+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1205+
1206+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1207+
1208+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"08"},"finish_reason":null}]}
1209+
1210+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1211+
1212+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Function"},"finish_reason":null}]}
1213+
1214+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1215+
1216+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"05"},"finish_reason":null}]}
1217+
1218+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1219+
1220+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Anonymous"},"finish_reason":null}]}
1221+
1222+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/example"},"finish_reason":null}]}
1223+
1224+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
1225+
1226+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1227+
1228+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1229+
1230+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1231+
1232+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Anonymous"},"finish_reason":null}]}
1233+
1234+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
1235+
1236+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
1237+
1238+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" sorting"},"finish_reason":null}]}
1239+
1240+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
1241+
1242+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
1243+
1244+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1245+
1246+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"4"},"finish_reason":null}]}
1247+
1248+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1249+
1250+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1251+
1252+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
1253+
1254+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
1255+
1256+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
1257+
1258+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
1259+
1260+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
1261+
1262+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1263+
1264+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1265+
1266+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
1267+
1268+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
1269+
1270+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1271+
1272+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
1273+
1274+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
633
1275
634− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Found"},"finish_reason":null}]}
1276+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"15"},"finish_reason":null}]}
635
1277
636− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1278+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-Con"},"finish_reason":null}]}
637
1279
638− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
1280+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"currency"},"finish_reason":null}]}
639
1281
640− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" matches"},"finish_reason":null}]}
1282+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
641
1283
642− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" across"},"finish_reason":null}]}
1284+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"03"},"finish_reason":null}]}
643
1285
644− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
1286+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
645
1287
646− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
1288+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Intro"},"finish_reason":null}]}
647
1289
648− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
1290+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/main"},"finish_reason":null}]}
649
1291
650− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
1292+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
651
1293
652− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Key"},"finish_reason":null}]}
1294+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
653
1295
654− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" examples"},"finish_reason":null}]}
1296+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
655
1297
656− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" include"},"finish_reason":null}]}
1298+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Gor"},"finish_reason":null}]}
657
1299
658− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":\n\n"},"finish_reason":null}]}
1300+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"outines"},"finish_reason":null}]}
659
1301
660− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1302+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
661
1303
662− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
1304+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" race"},"finish_reason":null}]}
663
1305
664− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"github"},"finish_reason":null}]}
1306+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" condition"},"finish_reason":null}]}
665
1307
666− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
1308+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" demo"},"finish_reason":null}]}
667
1309
668− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/j"},"finish_reason":null}]}
1310+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n"},"finish_reason":null}]}
669
1311
670− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"mb"},"finish_reason":null}]}
1312+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"|"},"finish_reason":null}]}
671
1313
672− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"har"},"finish_reason":null}]}
1314+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
673
1315
674− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ath"},"finish_reason":null}]}
1316+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"5"},"finish_reason":null}]}
675
1317
676− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ram"},"finish_reason":null}]}
1318+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
677
1319
678− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
1320+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
679
1321
680− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"execute"},"finish_reason":null}]}
1322+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"na"},"finish_reason":null}]}
681
1323
682− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"on"},"finish_reason":null}]}
1324+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"e"},"finish_reason":null}]}
683
1325
684− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"command"},"finish_reason":null}]}
1326+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"em"},"finish_reason":null}]}
685
1327
686− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
1328+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ae"},"finish_reason":null}]}
687
1329
688− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
1330+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"i"},"finish_reason":null}]}
689
1331
690− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1332+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
691
1333
692− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
1334+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
693
1335
694− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
1336+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-T"},"finish_reason":null}]}
695
1337
696− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1338+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"utorial"},"finish_reason":null}]}
697
1339
698− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
1340+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
699
1341
700− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" gor"},"finish_reason":null}]}
1342+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
701
1343
702− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"outines"},"finish_reason":null}]}
1344+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
703
1345
704− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
1346+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"08"},"finish_reason":null}]}
705
1347
706− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" channels"},"finish_reason":null}]}
1348+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
707
1349
708− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\n"},"finish_reason":null}]}
1350+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Function"},"finish_reason":null}]}
709
1351
710− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-"},"finish_reason":null}]}
1352+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/"},"finish_reason":null}]}
711
1353
712− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" **"},"finish_reason":null}]}
1354+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"04"},"finish_reason":null}]}
713
1355
714− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"github"},"finish_reason":null}]}
1356+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-V"},"finish_reason":null}]}
715
1357
716− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".com"},"finish_reason":null}]}
1358+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ari"},"finish_reason":null}]}
717
1359
718− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1360+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"adic"},"finish_reason":null}]}
719
1361
720− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"oes"},"finish_reason":null}]}
1362+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/example"},"finish_reason":null}]}
721
1363
722− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"To"},"finish_reason":null}]}
1364+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"2"},"finish_reason":null}]}
723
1365
724− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Ele"},"finish_reason":null}]}
1366+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
725
1367
726− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"ven"},"finish_reason":null}]}
1368+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
727
1369
728− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/G"},"finish_reason":null}]}
1370+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |"},"finish_reason":null}]}
729
1371
730− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1372+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Vari"},"finish_reason":null}]}
731
1373
732− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
1374+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"adic"},"finish_reason":null}]}
733
1375
734− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"**"},"finish_reason":null}]}
1376+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
735
1377
736− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" —"},"finish_reason":null}]}
1378+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
737
1379
738− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Multiple"},"finish_reason":null}]}
1380+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
739
1381
740− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1382+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
741
1383
742− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
1384+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"interface"},"finish_reason":null}]}
743
1385
744− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
1386+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"{"},"finish_reason":null}]}
745
1387
746− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
1388+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"}`"},"finish_reason":null}]}
747
1389
748− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" examples"},"finish_reason":null}]}
1390+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" |\n\n"},"finish_reason":null}]}
749
1391
750− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" demonstrating"},"finish_reason":null}]}
1392+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
751
1393
752− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" function"},"finish_reason":null}]}
1394+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" search"},"finish_reason":null}]}
753
1395
754− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" expressions"},"finish_reason":null}]}
1396+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" returned"},"finish_reason":null}]}
755
1397
756− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\n\n"},"finish_reason":null}]}
1398+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" "},"finish_reason":null}]}
757
1399
758− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"The"},"finish_reason":null}]}
1400+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"30"},"finish_reason":null}]}
759
1401
760− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
1402+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
761
1403
762− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" are"},"finish_reason":null}]}
1404+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" ("},"finish_reason":null}]}
763
1405
764− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" mostly"},"finish_reason":null}]}
1406+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"max"},"finish_reason":null}]}
765
1407
766− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
1408+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" for"},"finish_reason":null}]}
767
1409
768− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" tutorial"},"finish_reason":null}]}
1410+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" this"},"finish_reason":null}]}
769
1411
770− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"/tr"},"finish_reason":null}]}
1412+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" query"},"finish_reason":null}]}
771
1413
772− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"aining"},"finish_reason":null}]}
1414+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":")."},"finish_reason":null}]}
773
1415
774− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repos"},"finish_reason":null}]}
1416+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" To"},"finish_reason":null}]}
775
1417
776− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
1418+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" narrow"},"finish_reason":null}]}
777
1419
778− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" To"},"finish_reason":null}]}
1420+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
779
1421
780− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" narrow"},"finish_reason":null}]}
1422+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
781
1423
782− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" results"},"finish_reason":null}]}
1424+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" you"},"finish_reason":null}]}
783
1425
784− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":","},"finish_reason":null}]}
1426+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" could"},"finish_reason":null}]}
785
1427
786− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" try"},"finish_reason":null}]}
1428+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" add"},"finish_reason":null}]}
787
1429
788− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" a"},"finish_reason":null}]}
1430+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" repo"},"finish_reason":null}]}
789
1431
790− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" more"},"finish_reason":null}]}
1432+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" filters"},"finish_reason":null}]}
791
1433
792− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" specific"},"finish_reason":null}]}
1434+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}]}
793
1435
794− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" query"},"finish_reason":null}]}
1436+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
795
1437
796− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}]}
1438+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"repo"},"finish_reason":null}]}
797
1439
798− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
1440+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
799
1441
800− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"func"},"finish_reason":null}]}
1442+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"specific"},"finish_reason":null}]}
801
1443
802− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
1444+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"-org"},"finish_reason":null}]}
803
1445
804− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"()"},"finish_reason":null}]}
1446+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
805
1447
806− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" lang"},"finish_reason":null}]}
1448+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" or"},"finish_reason":null}]}
807
1449
808− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
1450+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" file"},"finish_reason":null}]}
809
1451
810− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Go"},"finish_reason":null}]}
1452+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" patterns"},"finish_reason":null}]}
811
1453
812− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" -"},"finish_reason":null}]}
1454+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" like"},"finish_reason":null}]}
813
1455
814− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"repo"},"finish_reason":null}]}
1456+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
815
1457
816− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
1458+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"file"},"finish_reason":null}]}
817
1459
818− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"G"},"finish_reason":null}]}
1460+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
819
1461
820− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"olang"},"finish_reason":null}]}
1462+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
821
1463
822− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Training"},"finish_reason":null}]}
1464+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
823
1465
824− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
1466+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
825
1467
826− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
1468+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
827
1469
828− data: {"id":"chatcmpl-438e2c6bfceb138401c90578","object":"chat.completion.chunk","created":1780069704,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":3203,"completion_tokens":98,"total_tokens":11109,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00460753,"hypercredits":0.0921506},"remaining":{"hypercredits":0}}}
1470+ data: {"id":"chatcmpl-16231ebe40610277d373b23f","object":"chat.completion.chunk","created":1782413835,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":4351,"completion_tokens":265,"total_tokens":12095,"prompt_tokens_details":{"cached_tokens":7479},"cost":{"usd":0.007257399999999999,"hypercredits":0.14514799999999997},"remaining":{"hypercredits":0}}}
829
1471
830 data: [DONE]
1472 data: [DONE]
831
1473
@@ -834,4 +1476,4 @@ interactions:
834 - text/event-stream
1476 - text/event-stream
835 status: 200 OK
1477 status: 200 OK
836 code: 200
1478 code: 200
837− duration: 769.076542ms
1479+ duration: 924.067458ms
internal/agent/testdata/TestCoderAgent/glm-5.1/update_a_file.yaml+438−238
@@ -2,6 +2,82 @@
2version: 2
2version: 2
3interactions:
3interactions:
4- id: 0
4- id: 0
5+ request:
6+ proto: HTTP/1.1
7+ proto_major: 1
8+ proto_minor: 1
9+ content_length: 35651
10+ host: ""
11+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
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-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29+
30+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
31+
32+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
33+
34+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" find"},"finish_reason":null}]}
35+
36+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
37+
38+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
39+
40+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
41+
42+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
43+
44+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
45+
46+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
47+
48+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
49+
50+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
51+
52+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_6edb28097a757377","type":"function","index":0,"function":{"name":"glob","arguments":""}}]},"finish_reason":null}]}
53+
54+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"pattern\": \""}}]},"finish_reason":null}]}
55+
56+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"**"}}]},"finish_reason":null}]}
57+
58+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/"}}]},"finish_reason":null}]}
59+
60+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"main"}}]},"finish_reason":null}]}
61+
62+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
63+
64+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
65+
66+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
67+
68+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
69+
70+ data: {"id":"chatcmpl-52b4caf72d65fe4abb50e14a","object":"chat.completion.chunk","created":1782413787,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8117,"completion_tokens":25,"total_tokens":8185,"prompt_tokens_details":{"cached_tokens":43},"completion_tokens_details":{"reasoning_tokens":11},"cost":{"usd":0.0115222,"hypercredits":0.23044399999999998},"remaining":{"hypercredits":0}}}
71+
72+ data: [DONE]
73+
74+ headers:
75+ Content-Type:
76+ - text/event-stream
77+ status: 200 OK
78+ code: 200
79+ duration: 1.480144792s
80+- id: 1
5 request:
81 request:
6 proto: HTTP/1.1
82 proto: HTTP/1.1
7 proto_major: 1
83 proto_major: 1
@@ -25,217 +101,373 @@ interactions:
25 content_length: -1
101 content_length: -1
26 uncompressed: true
102 uncompressed: true
27 body: |+
103 body: |+
28− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
105+
106+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
107+
108+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
109+
110+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
111+
112+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
113+
114+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
115+
116+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
117+
118+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
119+
120+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
121+
122+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
123+
124+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
125+
126+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"update"},"finish_reason":null}]}
127+
128+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
129+
130+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
131+
132+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
133+
134+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
135+
136+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" by"},"finish_reason":null}]}
137+
138+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" changing"},"finish_reason":null}]}
139+
140+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
141+
142+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
143+
144+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
145+
146+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" say"},"finish_reason":null}]}
147+
148+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
149+
150+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
151+
152+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
153+
154+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
29
155
30− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" We"},"finish_reason":null}]}
31
157
32− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
33
159
34− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" wants"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
35
161
36− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
37
163
38− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
39
165
40− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
41
167
42− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
43
169
44− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
45
171
46− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
47
173
48− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
49
175
50− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
51
177
52− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"update"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
53
179
54− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
55
181
56− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
57
183
58− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")."},"finish_reason":null}]}
59
185
60− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Summ"},"finish_reason":null}]}
61
187
62− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" by"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ar"},"finish_reason":null}]}
63
189
64− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" changing"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ize"},"finish_reason":null}]}
65
191
66− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
67
193
68− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Possibly"},"finish_reason":null}]}
69
195
70− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
71
197
72− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" say"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Update"},"finish_reason":null}]}
73
199
74− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
75
201
76− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
77
203
78− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
79
205
80− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
81
207
82− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Must"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
83
209
84− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
85
211
86− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
87
213
88− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
89
215
90− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
91
217
92− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" within"},"finish_reason":null}]}
93
219
94− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" one"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
95
221
96− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
97
223
98− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
99
225
100− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" no"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
101
227
102− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
103
229
104− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
105
231
106− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
107
233
108− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
109
235
110− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
111
237
112− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Title"},"finish_reason":null}]}
238+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
113
239
114− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summar"},"finish_reason":null}]}
240+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
115
241
116− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"izing"},"finish_reason":null}]}
242+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
117
243
118− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
244+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
119
245
120− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
246+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
121
247
122− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
248+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
123
249
124− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
250+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
125
251
126− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Update"},"finish_reason":null}]}
252+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" length"},"finish_reason":null}]}
127
253
128− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
254+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
129
255
130− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
256+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
131
257
132− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
258+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
133
259
134− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
260+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" including"},"finish_reason":null}]}
135
261
136− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
262+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" spaces"},"finish_reason":null}]}
137
263
138− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
264+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
139
265
140− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
266+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
141
267
142− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
268+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
143
269
144− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
270+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
145
271
146− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" under"},"finish_reason":null}]}
272+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
147
273
148− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
274+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
149
275
150− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
276+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
151
277
152− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
278+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
153
279
154− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
280+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
155
281
156− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
282+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
157
283
158− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
284+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
159
285
160− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Update"},"finish_reason":null}]}
286+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
161
287
162− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
288+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"main"},"finish_reason":null}]}
163
289
164− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
290+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
165
291
166− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
292+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
167
293
168− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" print"},"finish_reason":null}]}
294+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"7"},"finish_reason":null}]}
169
295
170− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" hello"},"finish_reason":null}]}
296+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
171
297
172− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" from"},"finish_reason":null}]}
298+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"14"},"finish_reason":null}]}
173
299
174− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" crush"},"finish_reason":null}]}
300+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
175
301
176− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
302+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
177
303
178− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
304+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
179
305
180− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" let's"},"finish_reason":null}]}
306+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"15"},"finish_reason":null}]}
181
307
182− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
308+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
183
309
184− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
310+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
185
311
186− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
312+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"to"},"finish_reason":null}]}
187
313
188− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" U"},"finish_reason":null}]}
314+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
189
315
190− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
316+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"2"},"finish_reason":null}]}
191
317
192− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
318+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
193
319
194− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
320+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"17"},"finish_reason":null}]}
195
321
196− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" p"},"finish_reason":null}]}
322+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
197
323
198− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"..."},"finish_reason":null}]}
324+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
199
325
200− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
326+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
201
327
202− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" maybe"},"finish_reason":null}]}
328+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"18"},"finish_reason":null}]}
203
329
204− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
330+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
205
331
206− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
332+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
207
333
208− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
334+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"print"},"finish_reason":null}]}
209
335
210− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
336+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
211
337
212− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
338+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
213
339
214− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
340+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
215
341
216− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
342+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"23"},"finish_reason":null}]}
217
343
218− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
344+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
219
345
220− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Update"},"finish_reason":null}]}
346+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
221
347
222− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
348+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
223
349
224− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
350+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"24"},"finish_reason":null}]}
225
351
226− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
352+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
227
353
228− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
354+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
229
355
230− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
356+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"hello"},"finish_reason":null}]}
231
357
232− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
358+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
233
359
234− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
360+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
235
361
236− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
362+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
237
363
238− data: {"id":"chatcmpl-bac0545ec822d29b0d5a7124","object":"chat.completion.chunk","created":1780069674,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":218,"completion_tokens":113,"total_tokens":331,"completion_tokens_details":{"reasoning_tokens":96},"cost":{"usd":0.00016673,"hypercredits":0.0033345999999999996},"remaining":{"hypercredits":0}}}
364+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"29"},"finish_reason":null}]}
365+
366+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
367+
368+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
369+
370+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
371+
372+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"30"},"finish_reason":null}]}
373+
374+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
375+
376+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
377+
378+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"from"},"finish_reason":null}]}
379+
380+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
381+
382+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
383+
384+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
385+
386+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"34"},"finish_reason":null}]}
387+
388+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
389+
390+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
391+
392+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"="},"finish_reason":null}]}
393+
394+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"35"},"finish_reason":null}]}
395+
396+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
397+
398+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
399+
400+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"cr"},"finish_reason":null}]}
401+
402+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ush"},"finish_reason":null}]}
403+
404+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
405+
406+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"5"},"finish_reason":null}]}
407+
408+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" =\u003e"},"finish_reason":null}]}
409+
410+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
411+
412+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
413+
414+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
415+
416+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
417+
418+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"40"},"finish_reason":null}]}
419+
420+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
421+
422+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
423+
424+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" good"},"finish_reason":null}]}
425+
426+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
427+
428+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
429+
430+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
431+
432+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" or"},"finish_reason":null}]}
433+
434+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" col"},"finish_reason":null}]}
435+
436+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"ons"},"finish_reason":null}]}
437+
438+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
439+
440+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" One"},"finish_reason":null}]}
441+
442+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
443+
444+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
445+
446+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
447+
448+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
449+
450+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
451+
452+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Update"},"finish_reason":null}]}
453+
454+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" main"},"finish_reason":null}]}
455+
456+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
457+
458+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
459+
460+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
461+
462+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" hello"},"finish_reason":null}]}
463+
464+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
465+
466+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
467+
468+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
469+
470+ data: {"id":"chatcmpl-7298f05803f040f3dd86ff08","object":"chat.completion.chunk","created":1782413786,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":159,"completion_tokens":188,"total_tokens":411,"prompt_tokens_details":{"cached_tokens":64},"cost":{"usd":0.000132368,"hypercredits":0.00264736},"remaining":{"hypercredits":0}}}
239
471
240 data: [DONE]
472 data: [DONE]
241
473
@@ -244,15 +476,15 @@ interactions:
244 - text/event-stream
476 - text/event-stream
245 status: 200 OK
477 status: 200 OK
246 code: 200
478 code: 200
247− duration: 484.749333ms
479+ duration: 957.865209ms
248−- id: 1
480+- id: 2
249 request:
481 request:
250 proto: HTTP/1.1
482 proto: HTTP/1.1
251 proto_major: 1
483 proto_major: 1
252 proto_minor: 1
484 proto_minor: 1
253− content_length: 33964
485+ content_length: 36002
254 host: ""
486 host: ""
255− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
487+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6edb28097a757377\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/main.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me find and read the main.go file first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\",\"tool_call_id\":\"call_6edb28097a757377\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
256 headers:
488 headers:
257 Accept:
489 Accept:
258 - application/json
490 - application/json
@@ -269,85 +501,55 @@ interactions:
269 content_length: -1
501 content_length: -1
270 uncompressed: true
502 uncompressed: true
271 body: |+
503 body: |+
272− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
504+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
273−
274− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Let"},"finish_reason":null}]}
275−
276− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" me"},"finish_reason":null}]}
277
505
278− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" first"},"finish_reason":null}]}
506+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_0850fc4e3649ae50","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
279
507
280− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" read"},"finish_reason":null}]}
508+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
281
509
282− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
510+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
283
511
284− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" main"},"finish_reason":null}]}
512+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
285
513
286− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".go"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
287
515
288− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
516+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
289
517
290− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
518+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
291
519
292− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" see"},"finish_reason":null}]}
520+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
293
521
294− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" its"},"finish_reason":null}]}
522+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
295
523
296− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" current"},"finish_reason":null}]}
524+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
297
525
298− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
299
527
300− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
301
529
302− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_F9YjcYzHwrHN1Ic3572Oz4Xr","type":"function","index":0,"function":{"name":"view","arguments":""}}]},"finish_reason":null}]}
530+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
303
531
304− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
305
533
306− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
307
535
308− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
536+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/update"}}]},"finish_reason":null}]}
309
537
310− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
538+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
311
539
312− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
540+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
313
541
314− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
542+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
315
543
316− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
544+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
317
545
318− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
546+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
319
547
320− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
548+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
321
549
322− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
550+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
323
551
324− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
552+ data: {"id":"chatcmpl-e35b84742507124fc88d5708","object":"chat.completion.chunk","created":1782413788,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":8196,"completion_tokens":29,"total_tokens":8225,"cost":{"usd":0.011602,"hypercredits":0.23203999999999997},"remaining":{"hypercredits":0}}}
325−
326− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
327−
328− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
329−
330− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
331−
332− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
333−
334− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
335−
336− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/update"}}]},"finish_reason":null}]}
337−
338− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
339−
340− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
341−
342− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
343−
344− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
345−
346− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
347−
348− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
349−
350− data: {"id":"chatcmpl-4a778ce8db55e98cf59d1936","object":"chat.completion.chunk","created":1780069674,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":710,"completion_tokens":43,"total_tokens":7857,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":16},"cost":{"usd":0.0011779,"hypercredits":0.023558},"remaining":{"hypercredits":0}}}
351
553
352 data: [DONE]
554 data: [DONE]
353
555
@@ -356,15 +558,15 @@ interactions:
356 - text/event-stream
558 - text/event-stream
357 status: 200 OK
559 status: 200 OK
358 code: 200
560 code: 200
359− duration: 749.955292ms
561+ duration: 1.058921083s
360−- id: 2
562+- id: 3
361 request:
563 request:
362 proto: HTTP/1.1
564 proto: HTTP/1.1
363 proto_major: 1
565 proto_major: 1
364 proto_minor: 1
566 proto_minor: 1
365− content_length: 34502
567+ content_length: 36462
366 host: ""
568 host: ""
367− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_F9YjcYzHwrHN1Ic3572Oz4Xr\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the main.go file to see its current content.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_F9YjcYzHwrHN1Ic3572Oz4Xr\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
569+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6edb28097a757377\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/main.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me find and read the main.go file first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\",\"tool_call_id\":\"call_6edb28097a757377\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_0850fc4e3649ae50\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_0850fc4e3649ae50\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
368 headers:
570 headers:
369 Accept:
571 Accept:
370 - application/json
572 - application/json
@@ -381,89 +583,91 @@ interactions:
381 content_length: -1
583 content_length: -1
382 uncompressed: true
584 uncompressed: true
383 body: |+
585 body: |+
384− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
586+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
385
587
386− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_QUQ7vKujNwzMMi6LCjGzqGk4","type":"function","index":0,"function":{"name":"edit","arguments":""}}]},"finish_reason":null}]}
588+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_48000f2cf2781c84","type":"function","index":0,"function":{"name":"edit","arguments":""}}]},"finish_reason":null}]}
387
589
388− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
590+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"file_path\": \""}}]},"finish_reason":null}]}
389
591
390− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
592+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
391
593
392− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"file_path\": "}}]},"finish_reason":null}]}
594+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
393
595
394− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
596+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
395
597
396− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
598+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
397
599
398− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
600+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
399
601
400− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
602+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
401
603
402− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
604+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
403
605
404− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
606+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
405
607
406− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
608+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
407
609
408− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
610+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
409
611
410− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
612+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
411
613
412− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
614+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
413
615
414− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
616+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
415
617
416− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
618+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/update"}}]},"finish_reason":null}]}
417
619
418− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
620+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
419
621
420− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/update"}}]},"finish_reason":null}]}
622+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
421
623
422− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_a"}}]},"finish_reason":null}]}
624+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
423
625
424− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_file"}}]},"finish_reason":null}]}
626+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
425
627
426− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/main"}}]},"finish_reason":null}]}
628+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
427
629
428− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".go"}}]},"finish_reason":null}]}
630+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"new_string\": \""}}]},"finish_reason":null}]}
429
631
430− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", \"new_string\": "}}]},"finish_reason":null}]}
632+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
431
633
432− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\\tfmt"}}]},"finish_reason":null}]}
634+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
433
635
434− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
636+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
435
637
436− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
638+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"hello"}}]},"finish_reason":null}]}
437
639
438− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"hello"}}]},"finish_reason":null}]}
640+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" from"}}]},"finish_reason":null}]}
439
641
440− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" from"}}]},"finish_reason":null}]}
642+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" crush"}}]},"finish_reason":null}]}
441
643
442− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" crush"}}]},"finish_reason":null}]}
644+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\")"}}]},"finish_reason":null}]}
443
645
444− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\")"}}]},"finish_reason":null}]}
646+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
445
647
446− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", \"old_string\": "}}]},"finish_reason":null}]}
648+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"old_string\": \""}}]},"finish_reason":null}]}
447
649
448− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\\tfmt"}}]},"finish_reason":null}]}
650+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\tfmt"}}]},"finish_reason":null}]}
449
651
450− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
652+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".Println"}}]},"finish_reason":null}]}
451
653
452− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
654+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"(\\\""}}]},"finish_reason":null}]}
453
655
454− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
656+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Hello"}}]},"finish_reason":null}]}
455
657
456− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
658+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null}]}
457
659
458− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" World"}}]},"finish_reason":null}]}
660+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" World"}}]},"finish_reason":null}]}
459
661
460− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
662+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"!\\\")"}}]},"finish_reason":null}]}
461
663
462− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
664+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
463
665
464− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
666+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
465
667
466− data: {"id":"chatcmpl-bc1c0706c28fbf93cc7f727d","object":"chat.completion.chunk","created":1780069675,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":95,"completion_tokens":55,"total_tokens":7958,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00035545,"hypercredits":0.007109},"remaining":{"hypercredits":0}}}
668+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
669+
670+ data: {"id":"chatcmpl-db3dd8e13ef83643e7bfbaa0","object":"chat.completion.chunk","created":1782413789,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":90,"completion_tokens":55,"total_tokens":8340,"prompt_tokens_details":{"cached_tokens":8195},"cost":{"usd":0.000368,"hypercredits":0.007359999999999999},"remaining":{"hypercredits":0}}}
467
671
468 data: [DONE]
672 data: [DONE]
469
673
@@ -472,15 +676,15 @@ interactions:
472 - text/event-stream
676 - text/event-stream
473 status: 200 OK
677 status: 200 OK
474 code: 200
678 code: 200
475− duration: 721.554959ms
679+ duration: 1.046375s
476−- id: 3
680+- id: 4
477 request:
681 request:
478 proto: HTTP/1.1
682 proto: HTTP/1.1
479 proto_major: 1
683 proto_major: 1
480 proto_minor: 1
684 proto_minor: 1
481− content_length: 35047
685+ content_length: 36991
482 host: ""
686 host: ""
483− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_F9YjcYzHwrHN1Ic3572Oz4Xr\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me first read the main.go file to see its current content.\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_F9YjcYzHwrHN1Ic3572Oz4Xr\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_QUQ7vKujNwzMMi6LCjGzqGk4\",\"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_QUQ7vKujNwzMMi6LCjGzqGk4\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
687+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"update the main.go file by changing the print to say hello from crush\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_6edb28097a757377\",\"function\":{\"arguments\":\"{\\\"pattern\\\": \\\"**/main.go\\\"}\",\"name\":\"glob\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Let me find and read the main.go file first.\"},{\"content\":\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\",\"tool_call_id\":\"call_6edb28097a757377\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_0850fc4e3649ae50\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\"}\",\"name\":\"view\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<file>\\n 1|package main\\n 2|\\n 3|import \\\"fmt\\\"\\n 4|\\n 5|func main() {\\n 6|\\tfmt.Println(\\\"Hello, World!\\\")\\n 7|}\\n 8|\\n</file>\\n\",\"tool_call_id\":\"call_0850fc4e3649ae50\",\"role\":\"tool\"},{\"tool_calls\":[{\"id\":\"call_48000f2cf2781c84\",\"function\":{\"arguments\":\"{\\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\\", \\\"new_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"hello from crush\\\\\\\")\\\", \\\"old_string\\\": \\\"\\\\tfmt.Println(\\\\\\\"Hello, World!\\\\\\\")\\\"}\",\"name\":\"edit\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"\"},{\"content\":\"<result>\\nContent replaced in file: /tmp/crush-test/TestCoderAgent/glm-5.1/update_a_file/main.go\\n</result>\\n\",\"tool_call_id\":\"call_48000f2cf2781c84\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
484 headers:
688 headers:
485 Accept:
689 Accept:
486 - application/json
690 - application/json
@@ -497,45 +701,41 @@ interactions:
497 content_length: -1
701 content_length: -1
498 uncompressed: true
702 uncompressed: true
499 body: |+
703 body: |+
500− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
704+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
501−
502− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Done"},"finish_reason":null}]}
503−
504− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
505
705
506− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" Updated"},"finish_reason":null}]}
706+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Updated"},"finish_reason":null}]}
507
707
508− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
708+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
509
709
510− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
710+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"main"},"finish_reason":null}]}
511
711
512− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
712+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".go"},"finish_reason":null}]}
513
713
514− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
714+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":":"},"finish_reason":null}]}
515
715
516− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
716+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"6"},"finish_reason":null}]}
517
717
518− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
718+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
519
719
520− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
720+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" to"},"finish_reason":null}]}
521
721
522− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
722+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" print"},"finish_reason":null}]}
523
723
524− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `\""},"finish_reason":null}]}
724+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `\""},"finish_reason":null}]}
525
725
526− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"hello"},"finish_reason":null}]}
726+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"hello"},"finish_reason":null}]}
527
727
528− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
728+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" from"},"finish_reason":null}]}
529
729
530− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
730+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" crush"},"finish_reason":null}]}
531
731
532− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null}]}
732+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"\""},"finish_reason":null}]}
533
733
534− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
734+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
535
735
536− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
736+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
537
737
538− data: {"id":"chatcmpl-f6de8499eb3c914cefe756a9","object":"chat.completion.chunk","created":1780069678,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":57,"completion_tokens":19,"total_tokens":8012,"prompt_tokens_details":{"cached_tokens":7936},"cost":{"usd":0.00015447,"hypercredits":0.0030894},"remaining":{"hypercredits":0}}}
738+ data: {"id":"chatcmpl-4c10bc623553fc6c41e0efc0","object":"chat.completion.chunk","created":1782413791,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":216,"completion_tokens":17,"total_tokens":8392,"prompt_tokens_details":{"cached_tokens":8159},"cost":{"usd":0.0003772,"hypercredits":0.0075439999999999995},"remaining":{"hypercredits":0}}}
539
739
540 data: [DONE]
740 data: [DONE]
541
741
@@ -544,4 +744,4 @@ interactions:
544 - text/event-stream
744 - text/event-stream
545 status: 200 OK
745 status: 200 OK
546 code: 200
746 code: 200
547− duration: 2.1932855s
747+ duration: 1.174163042s
internal/agent/testdata/TestCoderAgent/glm-5.1/write_tool.yaml+288−174
@@ -25,219 +25,323 @@ interactions:
25 content_length: -1
25 content_length: -1
26 uncompressed: true
26 uncompressed: true
27 body: |+
27 body: |+
28− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
28+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
29
29
30− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
30+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"The"},"finish_reason":null}]}
31
31
32− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" user"},"finish_reason":null}]}
32+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" task"},"finish_reason":null}]}
33
33
34− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" asks"},"finish_reason":null}]}
34+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
35
35
36− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
36+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" produce"},"finish_reason":null}]}
37
37
38− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
38+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
39
39
40− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Generate"},"finish_reason":null}]}
40+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
41
41
42− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
42+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
43
43
44− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
44+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"max"},"finish_reason":null}]}
45
45
46− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
46+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
47
47
48− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" for"},"finish_reason":null}]}
48+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
49
49
50− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" the"},"finish_reason":null}]}
50+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
51
51
52− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" following"},"finish_reason":null}]}
52+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
53
53
54− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
54+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
55
55
56− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":\n\n"},"finish_reason":null}]}
56+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
57
57
58− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
58+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
59
59
60− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
60+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
61
61
62− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
62+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
63
63
64− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
64+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summarize"},"finish_reason":null}]}
65
65
66− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
66+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
67
67
68− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" new"},"finish_reason":null}]}
68+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Content"},"finish_reason":null}]}
69
69
70− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
70+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
71
71
72− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" called"},"finish_reason":null}]}
72+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
73
73
74− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
74+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"use"},"finish_reason":null}]}
75
75
76− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
76+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
77
77
78− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
78+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
79
79
80− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
80+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
81
81
82− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '{\""},"finish_reason":null}]}
82+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
83
83
84− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"name"},"finish_reason":null}]}
84+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" new"},"finish_reason":null}]}
85
85
86− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
86+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
87
87
88− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
88+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" called"},"finish_reason":null}]}
89
89
90− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"test"},"finish_reason":null}]}
90+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
91
91
92− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\","},"finish_reason":null}]}
92+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
93
93
94− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
94+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
95
95
96− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"version"},"finish_reason":null}]}
96+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" content"},"finish_reason":null}]}
97
97
98− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
98+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" '{\""},"finish_reason":null}]}
99
99
100− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
100+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"name"},"finish_reason":null}]}
101
101
102− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
102+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
103
103
104− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
104+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
105
105
106− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
106+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"test"},"finish_reason":null}]}
107
107
108− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
108+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\","},"finish_reason":null}]}
109
109
110− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
110+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
111
111
112− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"}"},"finish_reason":null}]}
112+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"version"},"finish_reason":null}]}
113
113
114− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
114+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\":"},"finish_reason":null}]}
115
115
116− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"\n\n"},"finish_reason":null}]}
116+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
117
117
118− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"We"},"finish_reason":null}]}
118+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
119
119
120− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" need"},"finish_reason":null}]}
120+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
121
121
122− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
122+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
123
123
124− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" short"},"finish_reason":null}]}
124+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
125
125
126− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
126+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"0"},"finish_reason":null}]}
127
127
128− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
128+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"}"},"finish_reason":null}]}
129
129
130− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \u003c="},"finish_reason":null}]}
130+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"'"},"finish_reason":null}]}
131
131
132− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"50"},"finish_reason":null}]}
132+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
133
133
134− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" chars"},"finish_reason":null}]}
134+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" So"},"finish_reason":null}]}
135
135
136− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":","},"finish_reason":null}]}
136+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" title"},"finish_reason":null}]}
137
137
138− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" same"},"finish_reason":null}]}
138+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" could"},"finish_reason":null}]}
139
139
140− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" language"},"finish_reason":null}]}
140+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
141
141
142− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ("},"finish_reason":null}]}
142+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
143
143
144− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"English"},"finish_reason":null}]}
144+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
145
145
146− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"),"},"finish_reason":null}]}
146+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
147
147
148− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" summary"},"finish_reason":null}]}
148+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
149
149
150− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
150+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
151
151
152− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Something"},"finish_reason":null}]}
152+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
153
153
154− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" like"},"finish_reason":null}]}
154+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" metadata"},"finish_reason":null}]}
155
155
156− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
156+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\"."},"finish_reason":null}]}
157
157
158− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Create"},"finish_reason":null}]}
158+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Count"},"finish_reason":null}]}
159
159
160− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
160+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
161
161
162− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
162+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
163
163
164− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
164+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
165
165
166− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" name"},"finish_reason":null}]}
166+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
167
167
168− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
168+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
169
169
170− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" version"},"finish_reason":null}]}
170+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
171
171
172− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
172+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
173
173
174− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
174+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
175
175
176− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
176+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" metadata"},"finish_reason":null}]}
177
177
178− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
178+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
179
179
180− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" \""},"finish_reason":null}]}
180+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
181
181
182− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Create"},"finish_reason":null}]}
182+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
183
183
184− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
184+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"36"},"finish_reason":null}]}
185
185
186− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
186+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"?"},"finish_reason":null}]}
187
187
188− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
188+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Let's"},"finish_reason":null}]}
189
189
190− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" name"},"finish_reason":null}]}
190+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" count"},"finish_reason":null}]}
191
191
192− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" and"},"finish_reason":null}]}
192+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":":"},"finish_reason":null}]}
193
193
194− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" version"},"finish_reason":null}]}
194+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Create"},"finish_reason":null}]}
195
195
196− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"\""},"finish_reason":null}]}
196+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
197
197
198− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" is"},"finish_reason":null}]}
198+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
199
199
200− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
200+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
201
201
202− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"38"},"finish_reason":null}]}
202+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
203
203
204− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" characters"},"finish_reason":null}]}
204+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
205
205
206− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
206+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
207
207
208− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" That's"},"finish_reason":null}]}
208+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
209
209
210− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" fine"},"finish_reason":null}]}
210+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
211
211
212− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":".\n\n"},"finish_reason":null}]}
212+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
213
213
214− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"Return"},"finish_reason":null}]}
214+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" inc"},"finish_reason":null}]}
215
215
216− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
216+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" dot"},"finish_reason":null}]}
217
217
218− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
218+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
219
219
220− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
220+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
221
221
222− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
222+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
223
223
224− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
224+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
225
225
226− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" config"},"finish_reason":null}]}
226+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
227
227
228− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
228+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
229
229
230− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
230+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
231
231
232− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" name"},"finish_reason":null}]}
232+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
233
233
234− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" and"},"finish_reason":null}]}
234+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
235
235
236− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" version"},"finish_reason":null}]}
236+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" test"},"finish_reason":null}]}
237
237
238− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
238+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
239
239
240− data: {"id":"chatcmpl-8ffea572a2477bb64ba0a191","object":"chat.completion.chunk","created":1780069705,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":232,"completion_tokens":115,"total_tokens":347,"completion_tokens_details":{"reasoning_tokens":98},"cost":{"usd":0.00017169,"hypercredits":0.0034338},"remaining":{"hypercredits":0}}}
240+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
241+
242+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
243+
244+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" space"},"finish_reason":null}]}
245+
246+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
247+
248+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" metadata"},"finish_reason":null}]}
249+
250+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"("},"finish_reason":null}]}
251+
252+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
253+
254+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":")"},"finish_reason":null}]}
255+
256+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" total"},"finish_reason":null}]}
257+
258+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
259+
260+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"6"},"finish_reason":null}]}
261+
262+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
263+
264+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
265+
266+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
267+
268+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"11"},"finish_reason":null}]}
269+
270+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
271+
272+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
273+
274+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
275+
276+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
277+
278+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
279+
280+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
281+
282+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
283+
284+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"4"},"finish_reason":null}]}
285+
286+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
287+
288+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"1"},"finish_reason":null}]}
289+
290+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"+"},"finish_reason":null}]}
291+
292+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"8"},"finish_reason":null}]}
293+
294+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" ="},"finish_reason":null}]}
295+
296+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" "},"finish_reason":null}]}
297+
298+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"37"},"finish_reason":null}]}
299+
300+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
301+
302+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Good"},"finish_reason":null}]}
303+
304+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
305+
306+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" No"},"finish_reason":null}]}
307+
308+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" quotes"},"finish_reason":null}]}
309+
310+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
311+
312+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Should"},"finish_reason":null}]}
313+
314+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" be"},"finish_reason":null}]}
315+
316+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" concise"},"finish_reason":null}]}
317+
318+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
319+
320+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" Return"},"finish_reason":null}]}
321+
322+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" just"},"finish_reason":null}]}
323+
324+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" that"},"finish_reason":null}]}
325+
326+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":" line"},"finish_reason":null}]}
327+
328+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
329+
330+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":"Create"},"finish_reason":null}]}
331+
332+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" config"},"finish_reason":null}]}
333+
334+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
335+
336+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
337+
338+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" test"},"finish_reason":null}]}
339+
340+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{"content":" metadata"},"finish_reason":null}]}
341+
342+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
343+
344+ data: {"id":"chatcmpl-0be0eeb5a4662c2cd9ff7a2c","object":"chat.completion.chunk","created":1782413841,"model":"gpt-oss-120b","choices":[],"usage":{"prompt_tokens":165,"completion_tokens":166,"total_tokens":399,"prompt_tokens_details":{"cached_tokens":68},"completion_tokens_details":{"reasoning_tokens":128},"cost":{"usd":0.00019294800000000002,"hypercredits":0.0038589600000000003},"remaining":{"hypercredits":0}}}
241
345
242 data: [DONE]
346 data: [DONE]
243
347
@@ -246,15 +350,15 @@ interactions:
246 - text/event-stream
350 - text/event-stream
247 status: 200 OK
351 status: 200 OK
248 code: 200
352 code: 200
249− duration: 396.384ms
353+ duration: 829.085792ms
250- id: 1
354- id: 1
251 request:
355 request:
252 proto: HTTP/1.1
356 proto: HTTP/1.1
253 proto_major: 1
357 proto_major: 1
254 proto_minor: 1
358 proto_minor: 1
255− content_length: 34001
359+ content_length: 35688
256 host: ""
360 host: ""
257− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
361+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use write to create a new file called config.json with content '{\\\"name\\\": \\\"test\\\", \\\"version\\\": \\\"1.0.0\\\"}'\",\"role\":\"user\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
258 headers:
362 headers:
259 Accept:
363 Accept:
260 - application/json
364 - application/json
@@ -271,109 +375,109 @@ interactions:
271 content_length: -1
375 content_length: -1
272 uncompressed: true
376 uncompressed: true
273 body: |+
377 body: |+
274− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
378+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
275
379
276− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Simple"},"finish_reason":null}]}
380+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"Simple"},"finish_reason":null}]}
277
381
278− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" request"},"finish_reason":null}]}
382+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" task"},"finish_reason":null}]}
279
383
280− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
384+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" -"},"finish_reason":null}]}
281
385
282− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
386+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" use"},"finish_reason":null}]}
283
387
284− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" a"},"finish_reason":null}]}
388+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
285
389
286− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" file"},"finish_reason":null}]}
390+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
287
391
288− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" with"},"finish_reason":null}]}
392+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" to"},"finish_reason":null}]}
289
393
290− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" write"},"finish_reason":null}]}
394+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" create"},"finish_reason":null}]}
291
395
292− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" tool"},"finish_reason":null}]}
396+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":" config"},"finish_reason":null}]}
293
397
294− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":"."},"finish_reason":null}]}
398+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"reasoning_content":".json"},"finish_reason":null}]}
295
399
296− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_kLqkWWD0dwlybPAAd0yUiCAx","type":"function","index":0,"function":{"name":"write","arguments":""}}]},"finish_reason":null}]}
400+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"id":"call_d1b12a23ddb7642c","type":"function","index":0,"function":{"name":"write","arguments":""}}]},"finish_reason":null}]}
297
401
298− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null}]}
402+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"content\": \""}}]},"finish_reason":null}]}
299
403
300− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{"}}]},"finish_reason":null}]}
404+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\\\""}}]},"finish_reason":null}]}
301
405
302− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"content\": "}}]},"finish_reason":null}]}
406+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"name"}}]},"finish_reason":null}]}
303
407
304− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"{\\\""}}]},"finish_reason":null}]}
408+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\":"}}]},"finish_reason":null}]}
305
409
306− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"name"}}]},"finish_reason":null}]}
410+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}]}
307
411
308− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\":"}}]},"finish_reason":null}]}
412+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"test"}}]},"finish_reason":null}]}
309
413
310− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}]}
414+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\","}}]},"finish_reason":null}]}
311
415
312− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"test"}}]},"finish_reason":null}]}
416+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}]}
313
417
314− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\","}}]},"finish_reason":null}]}
418+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"version"}}]},"finish_reason":null}]}
315
419
316− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}]}
420+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\":"}}]},"finish_reason":null}]}
317
421
318− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"version"}}]},"finish_reason":null}]}
422+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}]}
319
423
320− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\":"}}]},"finish_reason":null}]}
424+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
321
425
322− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" \\\""}}]},"finish_reason":null}]}
426+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
323
427
324− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
428+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}]}
325
429
326− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
430+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
327
431
328− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}]}
432+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}]}
329
433
330− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
434+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\"}"}}]},"finish_reason":null}]}
331
435
332− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"0"}}]},"finish_reason":null}]}
436+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
333
437
334− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\\\"}"}}]},"finish_reason":null}]}
438+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":", \"file_path\": \""}}]},"finish_reason":null}]}
335
439
336− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\", \"file_path\": "}}]},"finish_reason":null}]}
440+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/tmp"}}]},"finish_reason":null}]}
337
441
338− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"/tmp"}}]},"finish_reason":null}]}
442+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
339
443
340− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/c"}}]},"finish_reason":null}]}
444+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
341
445
342− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"rush"}}]},"finish_reason":null}]}
446+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
343
447
344− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-test"}}]},"finish_reason":null}]}
448+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
345
449
346− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/Test"}}]},"finish_reason":null}]}
450+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
347
451
348− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Coder"}}]},"finish_reason":null}]}
452+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
349
453
350− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Agent"}}]},"finish_reason":null}]}
454+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
351
455
352− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/g"}}]},"finish_reason":null}]}
456+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
353
457
354− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"lm"}}]},"finish_reason":null}]}
458+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
355
459
356− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"finish_reason":null}]}
460+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
357
461
358− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"5"}}]},"finish_reason":null}]}
462+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
359
463
360− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"."}}]},"finish_reason":null}]}
464+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
361
465
362− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"finish_reason":null}]}
466+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/write"}}]},"finish_reason":null}]}
363
467
364− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/write"}}]},"finish_reason":null}]}
468+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
365
469
366− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_tool"}}]},"finish_reason":null}]}
470+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/config"}}]},"finish_reason":null}]}
367
471
368− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"/config"}}]},"finish_reason":null}]}
472+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".json"}}]},"finish_reason":null}]}
369
473
370− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".json"}}]},"finish_reason":null}]}
474+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"finish_reason":null}]}
371
475
372− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null}]}
476+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null}]}
373
477
374− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
478+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"tool_calls"}]}
375
479
376− data: {"id":"chatcmpl-b2fc9d4641c9729689320104","object":"chat.completion.chunk","created":1780069705,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":724,"completion_tokens":59,"total_tokens":7887,"prompt_tokens_details":{"cached_tokens":7104},"completion_tokens_details":{"reasoning_tokens":12},"cost":{"usd":0.00124664,"hypercredits":0.024932799999999998},"remaining":{"hypercredits":0}}}
480+ data: {"id":"chatcmpl-0ab0ead55f9b3938fabdc183","object":"chat.completion.chunk","created":1782413842,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":695,"completion_tokens":59,"total_tokens":8233,"prompt_tokens_details":{"cached_tokens":7479},"completion_tokens_details":{"reasoning_tokens":13},"cost":{"usd":0.0012898,"hypercredits":0.025796},"remaining":{"hypercredits":0}}}
377
481
378 data: [DONE]
482 data: [DONE]
379
483
@@ -382,15 +486,15 @@ interactions:
382 - text/event-stream
486 - text/event-stream
383 status: 200 OK
487 status: 200 OK
384 code: 200
488 code: 200
385− duration: 533.025375ms
489+ duration: 2.580281959s
386- id: 2
490- id: 2
387 request:
491 request:
388 proto: HTTP/1.1
492 proto: HTTP/1.1
389 proto_major: 1
493 proto_major: 1
390 proto_minor: 1
494 proto_minor: 1
391− content_length: 34554
495+ content_length: 36227
392 host: ""
496 host: ""
393− body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\",\"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_kLqkWWD0dwlybPAAd0yUiCAx\",\"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 request to create a file with write tool.\"},{\"content\":\"<result>\\nFile successfully written: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\\n</result>\",\"tool_call_id\":\"call_kLqkWWD0dwlybPAAd0yUiCAx\",\"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, when rebasing always use -m.\\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 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
497+ body: "{\"messages\":[{\"content\":\"You are Crush, a powerful AI Assistant that runs in the CLI.\\n\\n<critical_rules>\\nThese rules override everything else. Follow them strictly:\\n\\n1. **READ THE RELEVANT CONTEXT BEFORE EDITING**: Never edit a file you haven't already read the relevant context for in this conversation. Once read, you don't need to re-read unless it changed. Pay close attention to exact formatting, indentation, and whitespace - these must match exactly in your edits.\\n2. **BE AUTONOMOUS**: Don't ask questions - search, read, think, decide, act. Break complex tasks into steps and complete them all. Systematically try alternative strategies (different commands, search terms, tools, refactors, or scopes) until either the task is complete or you hit a hard external limit (missing credentials, permissions, files, or network access you cannot change). Only stop for actual blocking errors, not perceived difficulty.\\n3. **TEST AFTER CHANGES**: Run tests immediately after each modification.\\n4. **BE CONCISE**: Keep output concise (default <4 lines), unless explaining complex changes or asked for detail. Conciseness applies to output only, not to thoroughness of work.\\n5. **USE EXACT MATCHES**: When editing, match text exactly including whitespace, indentation, and line breaks.\\n6. **NEVER COMMIT**: Unless user explicitly says \\\"commit\\\". When committing, follow the `<git_commits>` format from the bash tool description exactly, including any configured attribution lines.\\n7. **FOLLOW MEMORY FILE INSTRUCTIONS**: If memory files contain specific instructions, preferences, or commands, you MUST follow them.\\n8. **NEVER ADD COMMENTS**: Only add comments if the user asked you to do so. Focus on *why* not *what*. NEVER communicate with the user through code comments.\\n9. **SECURITY FIRST**: Only assist with defensive security tasks. Refuse to create, modify, or improve code that may be used maliciously.\\n10. **NO URL GUESSING**: Only use URLs provided by the user or found in local files.\\n11. **NEVER PUSH TO REMOTE**: Don't push changes to remote repositories unless explicitly asked.\\n12. **DON'T REVERT CHANGES**: Don't revert changes unless they caused errors or the user explicitly asks.\\n13. **TOOL CONSTRAINTS**: Only use documented tools. Never attempt 'apply_patch' or 'apply_diff' - they don't exist. Use 'edit' or 'multiedit' instead.\\n14. **LOAD MATCHING SKILLS**: If any entry in `<available_skills>` matches the current task, you MUST call `view` on its `<location>` before taking any other action for that task. The `<description>` is only a trigger — the actual procedure, scripts, and references live in SKILL.md. Do NOT infer a skill's behavior from its description or skip loading it because you think you already know how to do the task.\\n15. **LIMIT FILE READS**: Avoid reading entire files, as they can be very large. Read only the sections you need using 'offset' and 'limit' parameters.\\n</critical_rules>\\n\\n<communication_style>\\nKeep responses minimal:\\n- ALWAYS think and respond in the same spoken language the prompt was written in.\\n- Under 4 lines of text (tool use doesn't count)\\n- Conciseness is about **text only**: always fully implement the requested feature, tests, and wiring even if that requires many tool calls.\\n- No preamble (\\\"Here's...\\\", \\\"I'll...\\\")\\n- No postamble (\\\"Let me know...\\\", \\\"Hope this helps...\\\")\\n- One-word answers when possible\\n- No emojis ever\\n- No explanations unless user asks\\n- Never send acknowledgement-only responses; after receiving new context or instructions, immediately continue the task or state the concrete next action you will take.\\n- Use rich Markdown formatting (headings, bullet lists, tables, code fences) for any multi-sentence or explanatory answer; only use plain unformatted text if the user explicitly asks.\\n\\nExamples:\\nuser: what is 2+2?\\nassistant: 4\\n\\nuser: list files in src/\\nassistant: [uses ls tool]\\nfoo.c, bar.c, baz.c\\n\\nuser: which file has the foo implementation?\\nassistant: src/foo.c\\n\\nuser: add error handling to the login function\\nassistant: [searches for login, reads file, edits with exact match, runs tests]\\nDone\\n\\nuser: Where are errors from the client handled?\\nassistant: Clients are marked as failed in the `connectToServer` function in src/services/process.go:712.\\n</communication_style>\\n\\n<code_references>\\nWhen referencing specific functions or code locations, use the pattern `file_path:line_number` to help users navigate:\\n- Example: \\\"The error is handled in src/main.go:45\\\"\\n- Example: \\\"See the implementation in pkg/utils/helper.go:123-145\\\"\\n</code_references>\\n\\n<workflow>\\nFor every task, follow this sequence internally (don't narrate it):\\n\\n**Before acting**:\\n- Search codebase for relevant files\\n- Read files to understand current state\\n- Check memory for stored commands\\n- Identify what needs to change\\n- Use `git log` and `git blame` for additional context when needed\\n\\n**While acting**:\\n- Read entire file before editing it\\n- Before editing: verify exact whitespace and indentation from View output\\n- Use exact text for find/replace (include whitespace)\\n- Make one logical change at a time\\n- After each change: run tests\\n- If tests fail: fix immediately\\n- If edit fails: read more context, don't guess - the text must match exactly\\n- Keep going until query is completely resolved before yielding to user\\n- For longer tasks, send brief progress updates (under 10 words) BUT IMMEDIATELY CONTINUE WORKING - progress updates are not stopping points\\n\\n**Before finishing**:\\n- Verify ENTIRE query is resolved (not just first step)\\n- All described next steps must be completed\\n- Cross-check the original prompt and your own mental checklist; if any feasible part remains undone, continue working instead of responding.\\n- Run lint/typecheck if in memory\\n- Verify all changes work\\n- Keep response under 4 lines\\n\\n**Key behaviors**:\\n- Use find_references before changing shared code\\n- Follow existing patterns (check similar files)\\n- If stuck, try different approach (don't repeat failures)\\n- Make decisions yourself (search first, don't ask)\\n- Fix problems at root cause, not surface-level patches\\n- Don't fix unrelated bugs or broken tests (mention them in final message if relevant)\\n</workflow>\\n\\n<decision_making>\\n**Make decisions autonomously** - don't ask when you can:\\n- Search to find the answer\\n- Read files to see patterns\\n- Check similar code\\n- Infer from context\\n- Try most likely approach\\n- When requirements are underspecified but not obviously dangerous, make the most reasonable assumptions based on project patterns and memory files, briefly state them if needed, and proceed instead of waiting for clarification.\\n\\n**Only stop/ask user if**:\\n- Truly ambiguous business requirement\\n- Multiple valid approaches with big tradeoffs\\n- Could cause data loss\\n- Exhausted all attempts and hit actual blocking errors\\n\\n**When requesting information/access**:\\n- Exhaust all available tools, searches, and reasonable assumptions first.\\n- Never say \\\"Need more info\\\" without detail.\\n- In the same message, list each missing item, why it is required, acceptable substitutes, and what you already attempted.\\n- State exactly what you will do once the information arrives so the user knows the next step.\\n\\nWhen you must stop, first finish all unblocked parts of the request, then clearly report: (a) what you tried, (b) exactly why you are blocked, and (c) the minimal external action required. Don't stop just because one path failed—exhaust multiple plausible approaches first.\\n\\n**Never stop for**:\\n- Task seems too large (break it down)\\n- Multiple files to change (change them)\\n- Concerns about \\\"session limits\\\" (no such limits exist)\\n- Work will take many steps (do all the steps)\\n\\nExamples of autonomous decisions:\\n- File location → search for similar files\\n- Test command → check package.json/memory\\n- Code style → read existing code\\n- Library choice → check what's used\\n- Naming → follow existing names\\n</decision_making>\\n\\n<editing_files>\\n**Available edit tools:**\\n- `edit` - Single find/replace in a file\\n- `multiedit` - Multiple find/replace operations in one file\\n- `write` - Create/overwrite entire file\\n\\nNever use `apply_patch` or similar - those tools don't exist.\\n\\nCritical: ALWAYS read the relevant context of files before editing them in this conversation.\\n\\nWhen using edit tools:\\n1. Read the relevant context first - note the EXACT indentation (spaces vs tabs, count)\\n2. Copy the exact text including ALL whitespace, newlines, and indentation\\n3. Include 3-5 lines of context before and after the target\\n4. Verify your old_string would appear exactly once in the file\\n5. If uncertain about whitespace, include more surrounding context\\n6. Verify edit succeeded\\n7. Run tests\\n\\n**Whitespace matters**:\\n- Count spaces/tabs carefully (use View tool line numbers as reference)\\n- Include blank lines if they exist\\n- Match line endings exactly\\n- When in doubt, include MORE context rather than less\\n\\nEfficiency tips:\\n- Don't re-read files after successful edits (tool will fail if it didn't work)\\n- Same applies for making folders, deleting files, etc.\\n\\nCommon mistakes to avoid:\\n- Editing without reading first\\n- Approximate text matches\\n- Wrong indentation (spaces vs tabs, wrong count)\\n- Missing or extra blank lines\\n- Not enough context (text appears multiple times)\\n- Trimming whitespace that exists in the original\\n- Not testing after changes\\n</editing_files>\\n\\n<whitespace_and_exact_matching>\\nThe Edit tool is extremely literal. \\\"Close enough\\\" will fail.\\n\\n**Before every edit**:\\n1. View the file and locate the exact lines to change\\n2. Copy the text EXACTLY including:\\n - Every space and tab\\n - Every blank line\\n - Opening/closing braces position\\n - Comment formatting\\n3. Include enough surrounding lines (3-5) to make it unique\\n4. Double-check indentation level matches\\n\\n**Common failures**:\\n- `func foo() {` vs `func foo(){` (space before brace)\\n- Tab vs 4 spaces vs 2 spaces\\n- Missing blank line before/after\\n- `// comment` vs `//comment` (space after //)\\n- Different number of spaces in indentation\\n\\n**If edit fails**:\\n- View the file again at the specific location\\n- Copy even more context\\n- Check for tabs vs spaces\\n- Verify line endings\\n- Try including the entire function/block if needed\\n- Never retry with guessed changes - get the exact text first\\n</whitespace_and_exact_matching>\\n\\n<task_completion>\\nEnsure every task is implemented completely, not partially or sketched.\\n\\n1. **Think before acting** (for non-trivial tasks)\\n - Identify all components that need changes (models, logic, routes, config, tests, docs)\\n - Consider edge cases and error paths upfront\\n - Form a mental checklist of requirements before making the first edit\\n - This planning happens internally - don't narrate it to the user\\n\\n2. **Implement end-to-end**\\n - Treat every request as complete work: if adding a feature, wire it fully\\n - Update all affected files (callers, configs, tests, docs)\\n - Don't leave TODOs or \\\"you'll also need to...\\\" - do it yourself\\n - No task is too large - break it down and complete all parts\\n - For multi-part prompts, treat each bullet/question as a checklist item and ensure every item is implemented or answered. Partial completion is not an acceptable final state.\\n\\n3. **Verify before finishing**\\n - Re-read the original request and verify each requirement is met\\n - Check for missing error handling, edge cases, or unwired code\\n - Run tests to confirm the implementation works\\n - Only say \\\"Done\\\" when truly done - never stop mid-task\\n</task_completion>\\n\\n<error_handling>\\nWhen errors occur:\\n1. Read complete error message\\n2. Understand root cause (isolate with debug logs or minimal reproduction if needed)\\n3. Try different approach (don't repeat same action)\\n4. Search for similar code that works\\n5. Make targeted fix\\n6. Test to verify\\n7. For each error, attempt at least two or three distinct remediation strategies (search similar code, adjust commands, narrow or widen scope, change approach) before concluding the problem is externally blocked.\\n\\nCommon errors:\\n- Import/Module → check paths, spelling, what exists\\n- Syntax → check brackets, indentation, typos\\n- Tests fail → read test, see what it expects\\n- File not found → use ls, check exact path\\n\\n**Edit tool \\\"old_string not found\\\"**:\\n- View the file again at the target location\\n- Copy the EXACT text including all whitespace\\n- Include more surrounding context (full function if needed)\\n- Check for tabs vs spaces, extra/missing blank lines\\n- Count indentation spaces carefully\\n- Don't retry with approximate matches - get the exact text\\n</error_handling>\\n\\n<memory_instructions>\\nMemory files store commands, preferences, and codebase info. Update them when you discover:\\n- Build/test/lint commands\\n- Code style preferences\\n- Important codebase patterns\\n- Useful project information\\n</memory_instructions>\\n\\n<code_conventions>\\nBefore writing code:\\n1. Check if library exists (look at imports, package.json)\\n2. Read similar code for patterns\\n3. Match existing style\\n4. Use same libraries/frameworks\\n5. Follow security best practices (never log secrets)\\n6. Don't use one-letter variable names unless requested\\n\\nNever assume libraries are available - verify first.\\n\\n**Ambition vs. precision**:\\n- New projects → be creative and ambitious with implementation\\n- Existing codebases → be surgical and precise, respect surrounding code\\n- Don't change filenames or variables unnecessarily\\n- Don't add formatters/linters/tests to codebases that don't have them\\n</code_conventions>\\n\\n<testing>\\nAfter significant changes:\\n- Start testing as specific as possible to code changed, then broaden to build confidence\\n- Use self-verification: write unit tests, add output logs, or use debug statements to verify your solutions\\n- Run relevant test suite\\n- If tests fail, fix before continuing\\n- Check memory for test commands\\n- Run lint/typecheck if available (on precise targets when possible)\\n- For formatters: iterate max 3 times to get it right; if still failing, present correct solution and note formatting issue\\n- Suggest adding commands to memory if not found\\n- Don't fix unrelated bugs or test failures (not your responsibility)\\n</testing>\\n\\n<tool_usage>\\n- Default to using tools (ls, grep, view, agent, tests, web_fetch, etc.) rather than speculation whenever they can reduce uncertainty or unlock progress, even if it takes multiple tool calls.\\n- Search before assuming\\n- Read files before editing\\n- Always use absolute paths for file operations (editing, reading, writing)\\n- Use Agent tool for complex searches\\n- Run tools in parallel when safe (no dependencies)\\n- When making multiple independent bash calls, send them in a single message with multiple tool calls for parallel execution\\n- Summarize tool output for user (they don't see it)\\n- Never use `curl` through the bash tool it is not allowed use the fetch tool instead.\\n- Only use the tools you know exist.\\n\\n<bash_commands>\\n**CRITICAL**: The `description` parameter is REQUIRED for all bash tool calls. Always provide it.\\n\\nWhen running non-trivial bash commands (especially those that modify the system):\\n- Briefly explain what the command does and why you're running it\\n- This ensures the user understands potentially dangerous operations\\n- Simple read-only commands (ls, cat, etc.) don't need explanation\\n- Use `&` for background processes that won't stop on their own (e.g., `node server.js &`)\\n- Avoid interactive commands - use non-interactive versions (e.g., `npm init -y` not `npm init`)\\n- Combine related commands to save time (e.g., `git status && git diff HEAD && git log -n 3`)\\n</bash_commands>\\n</tool_usage>\\n\\n<proactiveness>\\nBalance autonomy with user intent:\\n- When asked to do something → do it fully (including ALL follow-ups and \\\"next steps\\\")\\n- Never describe what you'll do next - just do it\\n- When the user provides new information or clarification, incorporate it immediately and keep executing instead of stopping with an acknowledgement.\\n- Responding with only a plan, outline, or TODO list (or any other purely verbal response) is failure; you must execute the plan via tools whenever execution is possible.\\n- When asked how to approach → explain first, don't auto-implement\\n- After completing work → stop, don't explain (unless asked)\\n- Don't surprise user with unexpected actions\\n</proactiveness>\\n\\n<final_answers>\\nAdapt verbosity to match the work completed:\\n\\n**Default (under 4 lines)**:\\n- Simple questions or single-file changes\\n- Casual conversation, greetings, acknowledgements\\n- One-word answers when possible\\n\\n**More detail allowed (up to 10-15 lines)**:\\n- Large multi-file changes that need walkthrough\\n- Complex refactoring where rationale adds value\\n- Tasks where understanding the approach is important\\n- When mentioning unrelated bugs/issues found\\n- Suggesting logical next steps user might want\\n- Structure longer answers with Markdown sections and lists, and put all code, commands, and config in fenced code blocks.\\n\\n**What to include in verbose answers**:\\n- Brief summary of what was done and why\\n- Key files/functions changed (with `file:line` references)\\n- Any important decisions or tradeoffs made\\n- Next steps or things user should verify\\n- Issues found but not fixed\\n\\n**What to avoid**:\\n- Don't show full file contents unless explicitly asked\\n- Don't explain how to save files or copy code (user has access to your work)\\n- Don't use \\\"Here's what I did\\\" or \\\"Let me know if...\\\" style preambles/postambles\\n- Keep tone direct and factual, like handing off work to a teammate\\n</final_answers>\\n\\n<env>\\nWorking directory: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool\\nIs directory a git repo: no\\nPlatform: linux\\nToday's date: 1/1/2025\\n\\n</env>\\n\\n\\n\\n<available_skills>\\n <skill>\\n <name>crush-hooks</name>\\n <description>Use when the user wants to add, write, debug, or configure a Crush hook — gating or blocking tool calls, approving or rewriting tool input before execution, injecting context into tool results, or troubleshooting hook behavior in crush.json.</description>\\n <location>crush://skills/crush-hooks/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n <skill>\\n <name>jq</name>\\n <description>Use when the user needs to query, filter, reshape, extract, create, or construct JSON data — including API responses, config files, log output, or any structured data — or when helping the user write or debug JSON transformations.</description>\\n <location>crush://skills/jq/SKILL.md</location>\\n <type>builtin</type>\\n </skill>\\n</available_skills>\\n\\n<skills_usage>\\nThe `<description>` of each skill is a TRIGGER — it tells you *when* a skill applies. It is NOT a specification of what the skill does or how to do it. The procedure, scripts, commands, references, and required flags live only in the SKILL.md body. You do not know what a skill actually does until you have read its SKILL.md.\\n\\nMANDATORY activation flow:\\n1. Scan `<available_skills>` against the current user task.\\n2. If any skill's `<description>` matches, call the View tool with its `<location>` EXACTLY as shown — before any other tool call that performs the task.\\n3. Read the entire SKILL.md and follow its instructions.\\n4. Only then execute the task, using the skill's prescribed commands/tools.\\n\\nDo NOT skip step 2 because you think you already know how to do the task. Do NOT infer a skill's behavior from its name or description. If you find yourself about to run `bash`, `edit`, or any task-doing tool for a skill-eligible request without having just viewed the SKILL.md, stop and load the skill first.\\n\\nBuiltin skills (type=builtin) use virtual `crush://skills/...` location identifiers. The \\\"crush://\\\" prefix is NOT a URL, network address, or MCP resource — it is a special internal identifier the View tool understands natively. Pass the `<location>` verbatim to View.\\n\\nDo not use MCP tools (including read_mcp_resource) to load skills.\\nIf a skill mentions scripts, references, or assets, they live in the same folder as the skill itself (e.g., scripts/, references/, assets/ subdirectories within the skill's folder).\\n</skills_usage>\\n\\n\\n\\n\\n\",\"role\":\"system\"},{\"content\":\"<system_reminder>This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware.\\nIf you are working on tasks that would benefit from a todo list please use the \\\"todos\\\" tool to create one.\\nIf not, please feel free to ignore. Again do not mention this message to the user.</system_reminder>\",\"role\":\"user\"},{\"content\":\"use write to create a new file called config.json with content '{\\\"name\\\": \\\"test\\\", \\\"version\\\": \\\"1.0.0\\\"}'\",\"role\":\"user\"},{\"tool_calls\":[{\"id\":\"call_d1b12a23ddb7642c\",\"function\":{\"arguments\":\"{\\\"content\\\": \\\"{\\\\\\\"name\\\\\\\": \\\\\\\"test\\\\\\\", \\\\\\\"version\\\\\\\": \\\\\\\"1.0.0\\\\\\\"}\\\", \\\"file_path\\\": \\\"/tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\\\"}\",\"name\":\"write\"},\"type\":\"function\"}],\"role\":\"assistant\",\"reasoning_content\":\"Simple task - use write tool to create config.json\"},{\"content\":\"<result>\\nFile successfully written: /tmp/crush-test/TestCoderAgent/glm-5.1/write_tool/config.json\\n</result>\",\"tool_call_id\":\"call_d1b12a23ddb7642c\",\"role\":\"tool\"}],\"model\":\"glm-5.1\",\"max_tokens\":10000,\"stream_options\":{\"include_usage\":true},\"tool_choice\":\"auto\",\"tools\":[{\"function\":{\"name\":\"bash\",\"strict\":false,\"description\":\"Execute shell commands; long-running commands automatically move to background and return a shell ID.\\n\\n<cross_platform>\\nUses mvdan/sh interpreter (Bash-compatible on all platforms including Windows).\\nUse forward slashes for paths: \\\"ls C:/foo/bar\\\" not \\\"ls C:\\\\foo\\\\bar\\\".\\nCommon shell builtins and core utils available on Windows.\\n</cross_platform>\\n\\n<execution_steps>\\n1. Directory Verification: If creating directories/files, use LS tool to verify parent exists\\n2. Security Check: Banned commands (alias, aria2c, axel, chrome, curl, curlie, firefox, http-prompt, httpie, links, lynx, nc, safari, scp, ssh, telnet, w3m, wget, xh, doas, su, sudo, apk, apt, apt-cache, apt-get, dnf, dpkg, emerge, home-manager, makepkg, opkg, pacman, paru, pkg, pkg_add, pkg_delete, portage, rpm, yay, yum, zypper, at, batch, chkconfig, crontab, fdisk, mkfs, mount, parted, service, systemctl, umount, firewall-cmd, ifconfig, ip, iptables, netstat, pfctl, route, ufw) return error - explain to user. Safe read-only commands execute without prompts\\n3. Command Execution: Execute with proper quoting, capture output\\n4. Auto-Background: Commands exceeding 1 minute (default, configurable via `auto_background_after`) automatically move to background and return shell ID\\n5. Output Processing: Truncate if exceeds 30000 characters\\n6. Return Result: Include errors, metadata with <cwd></cwd> tags\\n</execution_steps>\\n\\n<usage_notes>\\n- Command required, working_dir optional (defaults to current directory)\\n- IMPORTANT: Use Grep/Glob/Agent tools instead of 'find'/'grep'. Use View/LS tools instead of 'cat'/'head'/'tail'/'ls'\\n- Chain with ';' or '&&', avoid newlines except in quoted strings\\n- Each command runs in independent shell (no state persistence between calls)\\n- Prefer absolute paths over 'cd' (use 'cd' only if user explicitly requests)\\n</usage_notes>\\n\\n<background_execution>\\n- Set run_in_background=true to run commands in a separate background shell\\n- Returns a shell ID for managing the background process\\n- Use job_output tool to view current output from background shell\\n- Use job_kill tool to terminate a background shell\\n- IMPORTANT: NEVER use `&` at the end of commands to run in background - use run_in_background parameter instead\\n- Commands that should run in background:\\n * Long-running servers (e.g., `npm start`, `python -m http.server`, `node server.js`)\\n * Watch/monitoring tasks (e.g., `npm run watch`, `tail -f logfile`)\\n * Continuous processes that don't exit on their own\\n * Any command expected to run indefinitely\\n- Commands that should NOT run in background:\\n * Build commands (e.g., `npm run build`, `go build`)\\n * Test suites (e.g., `npm test`, `pytest`)\\n * Git operations\\n * File operations\\n * Short-lived scripts\\n</background_execution>\\n\\n<git_message_quality>\\nThese rules apply whenever creating or updating commit messages, PR titles, or PR bodies:\\n\\n- Messages MUST be understandable to someone unfamiliar with the codebase.\\n- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.\\n- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.\\n- Bad: \\\"Add NameFromHex with sync.Once lazy init\\\"\\n- Good: \\\"Improve color name lookup performance while keeping startup fast\\\"\\n</git_message_quality>\\n\\n<commit_messages>\\nCommit messages are for future readers scanning history. Before committing:\\n\\n- Follow <git_message_quality>.\\n- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.\\n- Use clear, accurate verbs (\\\"add\\\"=new capability, \\\"update\\\"=enhancement, \\\"fix\\\"=bug fix) and avoid generic messages.\\n- The first line MUST be under 72 characters.\\n- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.\\n- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.\\n- Bad: \\\"fix: nil pointer in session.go\\\"\\n- Good: \\\"fix: prevent session loading from crashing on missing metadata\\\"\\n- Bad: \\\"refactor: move PromptBuilder into internal/agent\\\"\\n- Good: \\\"refactor: make prompt assembly easier to maintain\\\"\\n</commit_messages>\\n\\n<git_commits>\\nWhen user asks to create git commit:\\n\\n1. Single message with three tool_use blocks (IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - git log (recent commit message style)\\n\\n2. Add relevant untracked files to staging. Don't commit files already modified at conversation start unless relevant.\\n\\n3. Analyze staged changes in <commit_analysis> tags:\\n - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)\\n - Brainstorm purpose/motivation, assess project impact, check for sensitive info\\n - Don't use tools beyond the context of git\\n\\n4. Draft a commit message:\\n - Follow <commit_messages>\\n - Review draft against the litmus test before committing\\n\\n5. Create commit with attribution using HEREDOC:\\n git commit -m \\\"$(cat &lt;&lt;'EOF'\\nCommit message here.\\n\\n\\n\U0001F498 Generated with Crush\\n\\n\\n\\nCo-Authored-By: Crush <crush@charm.land>\\n\\nEOF\\n)\\\"\\n\\n6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.\\n\\n7. Run git status to verify.\\n\\nNotes: Use \\\"git commit -am\\\" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.\\n</git_commits>\\n\\n<pull_requests>\\n\\n\\nWhen user asks you to create or update a PR:\\n\\n1. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):\\n - git status (untracked files)\\n - git diff (staged/unstaged changes)\\n - Check if branch tracks remote and is up to date\\n - git log and 'git diff main...HEAD' (full commit history from main divergence)\\n\\n2. Create new branch if needed\\n\\n3. Commit changes if needed\\n\\n4. Push to remote with -u flag if needed\\n\\n5. Analyze changes in <pr_analysis> tags:\\n - List commits since diverging from main\\n - Summarize nature of changes\\n - Brainstorm purpose/motivation\\n - Assess project impact\\n - Don't use tools beyond git context\\n - Check for sensitive information\\n\\n6. Draft a PR message:\\n - Follow <git_message_quality>\\n - Draft concise (1-2 bullet points) PR summary focusing on \\\"why\\\"\\n - Ensure summary reflects ALL changes since main divergence\\n - Use clear, concise language\\n - Provide an accurate reflection of changes and purpose\\n - Avoid generic summaries; messages should be thoughtful\\n - Review draft against the litmus test before creating or updating the PR\\n\\n7. Create PR with gh pr create using HEREDOC:\\n gh pr create --title \\\"title\\\" --body \\\"$(cat &lt;&lt;'EOF'\\n\\n<summary>\\n\\n\U0001F498 Generated with Crush\\n\\nEOF\\n)\\\"\\n\\nImportant:\\n\\n- Return empty response - user sees gh output\\n- Never update git config\\n</pull_requests>\\n\\n<examples>\\nGood: pytest /foo/bar/tests\\nBad: cd /foo/bar && pytest tests\\n</examples>\\n\",\"parameters\":{\"properties\":{\"auto_background_after\":{\"description\":\"Seconds to wait before automatically moving the command to a background job (default: 60)\",\"type\":\"integer\"},\"command\":{\"description\":\"The command to execute\",\"type\":\"string\"},\"description\":{\"description\":\"A brief description of what the command does, try to keep it under 30 characters or so\",\"type\":\"string\"},\"run_in_background\":{\"description\":\"Set to true (boolean) to run this command in the background. Use job_output to read the output later.\",\"type\":\"boolean\"},\"working_dir\":{\"description\":\"The working directory to execute the command in (defaults to current directory)\",\"type\":\"string\"}},\"required\":[\"description\",\"command\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"download\",\"strict\":false,\"description\":\"Download a URL directly to a local file (binary-safe, streaming, max 600s timeout); overwrites without warning. For reading content into context use fetch.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The local file path where the downloaded content should be saved\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 600)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to download from\",\"type\":\"string\"}},\"required\":[\"url\",\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"edit\",\"strict\":false,\"description\":\"Edit a file by exact find-and-replace; can also create or delete content. For renames/moves use bash. For large edits use write.\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"},\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false)\",\"type\":\"boolean\"}},\"required\":[\"file_path\",\"old_string\",\"new_string\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"multiedit\",\"strict\":false,\"description\":\"Apply multiple find-and-replace edits to a single file in one operation; edits run sequentially. Prefer over edit for multiple changes to the same file. Same exact-match rules as edit apply.\",\"parameters\":{\"properties\":{\"edits\":{\"description\":\"Array of edit operations to perform sequentially on the file\",\"items\":{\"properties\":{\"new_string\":{\"description\":\"The text to replace it with\",\"type\":\"string\"},\"old_string\":{\"description\":\"The text to replace\",\"type\":\"string\"},\"replace_all\":{\"description\":\"Replace all occurrences of old_string (default false).\",\"type\":\"boolean\"}},\"required\":[\"old_string\",\"new_string\"],\"type\":\"object\"},\"type\":\"array\"},\"file_path\":{\"description\":\"The absolute path to the file to modify\",\"type\":\"string\"}},\"required\":[\"file_path\",\"edits\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"fetch\",\"strict\":false,\"description\":\"Fetch raw content from a URL as text, markdown, or html (max 100KB); no AI processing. For analysis or extraction use agentic_fetch.\\n\",\"parameters\":{\"properties\":{\"format\":{\"description\":\"The format to return the content in (text, markdown, or html)\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"},\"url\":{\"description\":\"The URL to fetch content from\",\"type\":\"string\"}},\"required\":[\"url\",\"format\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"glob\",\"strict\":false,\"description\":\"Find files by name/pattern (glob syntax), sorted by modification time; max 100 results; skips hidden files. Use grep to search file contents.\\n\",\"parameters\":{\"properties\":{\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The glob pattern to match files against\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"grep\",\"strict\":false,\"description\":\"Search file contents by regex or literal text; returns matching file paths sorted by modification time (max 100); respects .gitignore. Use glob to filter by filename, not contents.\\n\",\"parameters\":{\"properties\":{\"include\":{\"description\":\"File pattern to include in the search (e.g. \\\"*.js\\\", \\\"*.{ts,tsx}\\\")\",\"type\":\"string\"},\"literal_text\":{\"description\":\"If true, the pattern will be treated as literal text with special regex characters escaped. Default is false.\",\"type\":\"boolean\"},\"path\":{\"description\":\"The directory to search in. Defaults to the current working directory.\",\"type\":\"string\"},\"pattern\":{\"description\":\"The regex pattern to search for in file contents\",\"type\":\"string\"}},\"required\":[\"pattern\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"ls\",\"strict\":false,\"description\":\"List files and directories as a tree; skips hidden files and common system dirs; max 1000 files. Use glob to find files by pattern, grep to search contents.\\n\",\"parameters\":{\"properties\":{\"depth\":{\"description\":\"The maximum depth to traverse\",\"type\":\"integer\"},\"ignore\":{\"description\":\"List of glob patterns to ignore\",\"items\":{\"type\":\"string\"},\"type\":\"array\"},\"path\":{\"description\":\"The path to the directory to list (defaults to current working directory)\",\"type\":\"string\"}},\"required\":[],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"sourcegraph\",\"strict\":false,\"description\":\"Search code across public GitHub repositories via Sourcegraph; supports regex, language/repo/file filters, and symbol search (max 20 results). Only searches public repos.\\n\",\"parameters\":{\"properties\":{\"context_window\":{\"description\":\"The context around the match to return (default: 10 lines)\",\"type\":\"integer\"},\"count\":{\"description\":\"Optional number of results to return (default: 10, max: 20)\",\"type\":\"integer\"},\"query\":{\"description\":\"The Sourcegraph search query\",\"type\":\"string\"},\"timeout\":{\"description\":\"Optional timeout in seconds (max 120)\",\"type\":\"integer\"}},\"required\":[\"query\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"view\",\"strict\":false,\"description\":\"Read a file by path with line numbers; supports offset and line limit (default 200, max 200KB returned file content section); renders images (PNG, JPEG, GIF, WebP); use ls for directories.\\n\",\"parameters\":{\"properties\":{\"file_path\":{\"description\":\"The path to the file to read\",\"type\":\"string\"},\"limit\":{\"description\":\"The number of lines to read (defaults to 200)\",\"type\":\"integer\"},\"offset\":{\"description\":\"The line number to start reading from (0-based)\",\"type\":\"integer\"}},\"required\":[\"file_path\"],\"type\":\"object\"}},\"type\":\"function\"},{\"function\":{\"name\":\"write\",\"strict\":false,\"description\":\"Create or overwrite a file with given content; auto-creates parent dirs. Cannot append. Read the file first to avoid conflicts. For surgical changes use edit or multiedit.\",\"parameters\":{\"properties\":{\"content\":{\"description\":\"The content to write to the file\",\"type\":\"string\"},\"file_path\":{\"description\":\"The path to the file to write\",\"type\":\"string\"}},\"required\":[\"file_path\",\"content\"],\"type\":\"object\"}},\"type\":\"function\"}],\"stream\":true}"
394 headers:
498 headers:
395 Accept:
499 Accept:
396 - application/json
500 - application/json
@@ -407,21 +511,31 @@ interactions:
407 content_length: -1
511 content_length: -1
408 uncompressed: true
512 uncompressed: true
409 body: |+
513 body: |+
410− data: {"id":"chatcmpl-c5f5fee46ba6c248fb29dc2e","object":"chat.completion.chunk","created":1780069706,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
514+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
515+
516+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Created"},"finish_reason":null}]}
517+
518+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
519+
520+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"config"},"finish_reason":null}]}
521+
522+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
523+
524+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`"},"finish_reason":null}]}
411
525
412− data: {"id":"chatcmpl-c5f5fee46ba6c248fb29dc2e","object":"chat.completion.chunk","created":1780069706,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"Created"},"finish_reason":null}]}
526+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" with"},"finish_reason":null}]}
413
527
414− data: {"id":"chatcmpl-c5f5fee46ba6c248fb29dc2e","object":"chat.completion.chunk","created":1780069706,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" `"},"finish_reason":null}]}
528+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" the"},"finish_reason":null}]}
415
529
416− data: {"id":"chatcmpl-c5f5fee46ba6c248fb29dc2e","object":"chat.completion.chunk","created":1780069706,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"config"},"finish_reason":null}]}
530+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" specified"},"finish_reason":null}]}
417
531
418− data: {"id":"chatcmpl-c5f5fee46ba6c248fb29dc2e","object":"chat.completion.chunk","created":1780069706,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":".json"},"finish_reason":null}]}
532+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":" content"},"finish_reason":null}]}
419
533
420− data: {"id":"chatcmpl-c5f5fee46ba6c248fb29dc2e","object":"chat.completion.chunk","created":1780069706,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"`."},"finish_reason":null}]}
534+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{"content":"."},"finish_reason":null}]}
421
535
422− data: {"id":"chatcmpl-c5f5fee46ba6c248fb29dc2e","object":"chat.completion.chunk","created":1780069706,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
536+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
423
537
424− data: {"id":"chatcmpl-c5f5fee46ba6c248fb29dc2e","object":"chat.completion.chunk","created":1780069706,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":102,"completion_tokens":7,"total_tokens":7917,"prompt_tokens_details":{"cached_tokens":7808},"cost":{"usd":0.00016302000000000002,"hypercredits":0.0032604},"remaining":{"hypercredits":0}}}
538+ data: {"id":"chatcmpl-d294613304c144102b9308d0","object":"chat.completion.chunk","created":1782413844,"model":"glm-5.1","choices":[],"usage":{"prompt_tokens":83,"completion_tokens":12,"total_tokens":8268,"prompt_tokens_details":{"cached_tokens":8173},"cost":{"usd":0.000169,"hypercredits":0.0033799999999999998},"remaining":{"hypercredits":0}}}
425
539
426 data: [DONE]
540 data: [DONE]
427
541
@@ -430,4 +544,4 @@ interactions:
430 - text/event-stream
544 - text/event-stream
431 status: 200 OK
545 status: 200 OK
432 code: 200
546 code: 200
433− duration: 628.357791ms
547+ duration: 1.15275075s
internal/agent/tools/bash.go+12−27
@@ -12,6 +12,8 @@ import (
12 "strings"
12 "strings"
13 "time"
13 "time"
14
14
15+ "github.com/charmbracelet/x/ansi"
16+
15 "charm.land/fantasy"
17 "charm.land/fantasy"
16 "github.com/charmbracelet/crush/internal/config"
18 "github.com/charmbracelet/crush/internal/config"
17 "github.com/charmbracelet/crush/internal/fsext"
19 "github.com/charmbracelet/crush/internal/fsext"
@@ -67,6 +69,7 @@ type bashDescriptionData struct {
67 Attribution config.Attribution
69 Attribution config.Attribution
68 ModelID string
70 ModelID string
69 RgAvailable bool
71 RgAvailable bool
72+ GhAvailable bool
70}
73}
71
74
72var bannedCommands = []string{
75var bannedCommands = []string{
@@ -151,6 +154,7 @@ func bashDescription(attribution *config.Attribution, modelID string) string {
151 Attribution: *attribution,
154 Attribution: *attribution,
152 ModelID: modelID,
155 ModelID: modelID,
153 RgAvailable: getRg() != "",
156 RgAvailable: getRg() != "",
157+ GhAvailable: ghAvailable,
154 }); err != nil {
158 }); err != nil {
155 // this should never happen.
159 // this should never happen.
156 panic("failed to execute bash description template: " + err.Error())
160 panic("failed to execute bash description template: " + err.Error())
@@ -202,19 +206,7 @@ func NewBashTool(permissions permission.Service, workingDir string, attribution
202 // Determine working directory
206 // Determine working directory
203 execWorkingDir := cmp.Or(params.WorkingDir, workingDir)
207 execWorkingDir := cmp.Or(params.WorkingDir, workingDir)
204
208
205− isSafeReadOnly := false
209+ isSafeReadOnly := isSafeReadOnly(params.Command)
206− cmdLower := strings.ToLower(params.Command)
207−
208− if !containsCommandChaining(params.Command) {
209− for _, safe := range safeCommands {
210− if strings.HasPrefix(cmdLower, safe) {
211− if len(cmdLower) == len(safe) || cmdLower[len(safe)] == ' ' || cmdLower[len(safe)] == '-' {
212− isSafeReadOnly = true
213− break
214− }
215− }
216− }
217− }
218
210
219 sessionID := GetSessionFromContext(ctx)
211 sessionID := GetSessionFromContext(ctx)
220 if sessionID == "" {
212 if sessionID == "" {
@@ -258,7 +250,7 @@ func NewBashTool(permissions permission.Service, workingDir string, attribution
258
250
259 if done {
251 if done {
260 // Command failed or completed very quickly
252 // Command failed or completed very quickly
261− bgManager.Remove(bgShell.ID)
253+ _ = bgManager.Remove(bgShell.ID)
262
254
263 interrupted := shell.IsInterrupt(execErr)
255 interrupted := shell.IsInterrupt(execErr)
264 exitCode := shell.ExitCode(execErr)
256 exitCode := shell.ExitCode(execErr)
@@ -333,7 +325,7 @@ func NewBashTool(permissions permission.Service, workingDir string, attribution
333 case <-ctx.Done():
325 case <-ctx.Done():
334 // Incoming context was cancelled before we moved to background
326 // Incoming context was cancelled before we moved to background
335 // Kill the shell and return error
327 // Kill the shell and return error
336− bgManager.Kill(bgShell.ID)
328+ _ = bgManager.Kill(bgShell.ID)
337 return fantasy.ToolResponse{}, ctx.Err()
329 return fantasy.ToolResponse{}, ctx.Err()
338 }
330 }
339 }
331 }
@@ -342,7 +334,7 @@ func NewBashTool(permissions permission.Service, workingDir string, attribution
342 // Command completed within threshold - return synchronously
334 // Command completed within threshold - return synchronously
343 // Remove from background manager since we're returning directly
335 // Remove from background manager since we're returning directly
344 // Don't call Kill() as it cancels the context and corrupts the exit code
336 // Don't call Kill() as it cancels the context and corrupts the exit code
345− bgManager.Remove(bgShell.ID)
337+ _ = bgManager.Remove(bgShell.ID)
346
338
347 interrupted := shell.IsInterrupt(execErr)
339 interrupted := shell.IsInterrupt(execErr)
348 exitCode := shell.ExitCode(execErr)
340 exitCode := shell.ExitCode(execErr)
@@ -421,15 +413,15 @@ func formatOutput(stdout, stderr string, execErr error) string {
421}
413}
422
414
423func TruncateOutput(content string) string {
415func TruncateOutput(content string) string {
424− if len(content) <= MaxOutputLength {
416+ if ansi.StringWidth(content) <= MaxOutputLength {
425 return content
417 return content
426 }
418 }
427
419
428 halfLength := MaxOutputLength / 2
420 halfLength := MaxOutputLength / 2
429− start := content[:halfLength]
421+ start := ansi.Truncate(content, halfLength, "")
430− end := content[len(content)-halfLength:]
422+ end := ansi.TruncateLeft(content, ansi.StringWidth(content)-halfLength, "")
431
423
432− truncatedLinesCount := countLines(content[halfLength : len(content)-halfLength])
424+ truncatedLinesCount := max(strings.Count(content, "\n")-strings.Count(start, "\n")-strings.Count(end, "\n"), 0)
433 return fmt.Sprintf("%s\n\n... [%d lines truncated] ...\n\n%s", start, truncatedLinesCount, end)
425 return fmt.Sprintf("%s\n\n... [%d lines truncated] ...\n\n%s", start, truncatedLinesCount, end)
434}
426}
435
427
@@ -437,13 +429,6 @@ func truncateOutput(content string) string {
437 return TruncateOutput(content)
429 return TruncateOutput(content)
438}
430}
439
431
440−func countLines(s string) int {
441− if s == "" {
442− return 0
443− }
444− return len(strings.Split(s, "\n"))
445−}
446−
447func normalizeWorkingDir(path string) string {
432func normalizeWorkingDir(path string) string {
448 if runtime.GOOS == "windows" {
433 if runtime.GOOS == "windows" {
449 path = strings.ReplaceAll(path, fsext.WindowsWorkingDirDrive(), "")
434 path = strings.ReplaceAll(path, fsext.WindowsWorkingDirDrive(), "")
internal/agent/tools/bash.md.tpl+60−32
@@ -45,6 +45,31 @@ Common shell builtins and core utils available on Windows.
45 * Short-lived scripts
45 * Short-lived scripts
46</background_execution>
46</background_execution>
47
47
48+<git_message_quality>
49+These rules apply whenever creating or updating commit messages, PR titles, or PR bodies:
50+
51+- Messages MUST be understandable to someone unfamiliar with the codebase.
52+- Before creating or updating a message, verify this litmus test: a new contributor reading only the commit message or PR title/body should understand what problem this solves, why it matters, and the impact without opening files, reading the diff, or knowing internal code names.
53+- Avoid code identifiers, filenames, function names, and implementation details unless they are necessary for understanding the user-facing impact.
54+- Bad: "Add NameFromHex with sync.Once lazy init"
55+- Good: "Improve color name lookup performance while keeping startup fast"
56+</git_message_quality>
57+
58+<commit_messages>
59+Commit messages are for future readers scanning history. Before committing:
60+
61+- Follow <git_message_quality>.
62+- Draft a concise 1-2 sentence message focusing on why the change exists and what outcome it enables, not a list of files or implementation details.
63+- Use clear, accurate verbs ("add"=new capability, "update"=enhancement, "fix"=bug fix) and avoid generic messages.
64+- The first line MUST be under 72 characters.
65+- Add a body only when it is needed to explain the reasoning, tradeoffs, or important context; wrap body lines at 72 characters.
66+- If the change is internal-only, still describe the benefit or maintenance outcome rather than naming private code.
67+- Bad: "fix: nil pointer in session.go"
68+- Good: "fix: prevent session loading from crashing on missing metadata"
69+- Bad: "refactor: move PromptBuilder into internal/agent"
70+- Good: "refactor: make prompt assembly easier to maintain"
71+</commit_messages>
72+
48<git_commits>
73<git_commits>
49When user asks to create git commit:
74When user asks to create git commit:
50
75
@@ -58,38 +83,42 @@ When user asks to create git commit:
583. Analyze staged changes in <commit_analysis> tags:
833. Analyze staged changes in <commit_analysis> tags:
59 - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)
84 - List changed/added files, summarize nature (feature/enhancement/bug fix/refactoring/test/docs)
60 - Brainstorm purpose/motivation, assess project impact, check for sensitive info
85 - Brainstorm purpose/motivation, assess project impact, check for sensitive info
61− - Don't use tools beyond git context
86+ - Don't use tools beyond the context of git
62− - Draft concise (1-2 sentences) message focusing on "why" not "what"
63− - Use clear language, accurate reflection ("add"=new feature, "update"=enhancement, "fix"=bug fix)
64− - Avoid generic messages, review draft
65
87
66−4. Create commit{{ if or (eq .Attribution.TrailerStyle "assisted-by") (eq .Attribution.TrailerStyle "co-authored-by")}} with attribution{{ end }} using HEREDOC:
88+4. Draft a commit message:
89+ - Follow <commit_messages>
90+ - Review draft against the litmus test before committing
91+
92+5. Create commit{{ if or (eq .Attribution.TrailerStyle "assisted-by") (eq .Attribution.TrailerStyle "co-authored-by")}} with attribution{{ end }} using HEREDOC:
67 git commit -m "$(cat <<'EOF'
93 git commit -m "$(cat <<'EOF'
68− Commit message here.
94+Commit message here.
69
95
70{{ if .Attribution.GeneratedWith }}
96{{ if .Attribution.GeneratedWith }}
71− 💘 Generated with Crush
97+💘 Generated with Crush
72{{ end}}
98{{ end}}
73{{if eq .Attribution.TrailerStyle "assisted-by" }}
99{{if eq .Attribution.TrailerStyle "assisted-by" }}
74
100
75− Assisted-by: Crush:{{ .ModelID }}
101+Assisted-by: Crush:{{ .ModelID }}
76{{ else if eq .Attribution.TrailerStyle "co-authored-by" }}
102{{ else if eq .Attribution.TrailerStyle "co-authored-by" }}
77
103
78− Co-Authored-By: Crush <crush@charm.land>
104+Co-Authored-By: Crush <crush@charm.land>
79{{ end }}
105{{ end }}
106+EOF
107+)"
80
108
81− EOF
109+6. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.
82− )"
83−
84−5. If pre-commit hook fails, retry ONCE. If fails again, hook preventing commit. If succeeds but files modified, MUST amend.
85
110
86−6. Run git status to verify.
111+7. Run git status to verify.
87
112
88Notes: Use "git commit -am" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.
113Notes: Use "git commit -am" when possible, don't stage unrelated files, NEVER update config, don't push, no -i flags, no empty commits, return empty response, when rebasing always use -m.
89</git_commits>
114</git_commits>
90
115
91<pull_requests>
116<pull_requests>
92−Use gh command for ALL GitHub tasks. When user asks to create PR:
117+{{ if .GhAvailable -}}
118+ Use the `gh` command for ALL GitHub tasks.
119+{{- end }}
120+
121+When user asks you to create or update a PR:
93
122
941. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):
1231. Single message with multiple tool_use blocks (VERY IMPORTANT for speed):
95 - git status (untracked files)
124 - git status (untracked files)
@@ -98,7 +127,9 @@ Use gh command for ALL GitHub tasks. When user asks to create PR:
98 - git log and 'git diff main...HEAD' (full commit history from main divergence)
127 - git log and 'git diff main...HEAD' (full commit history from main divergence)
99
128
1002. Create new branch if needed
1292. Create new branch if needed
130+
1013. Commit changes if needed
1313. Commit changes if needed
132+
1024. Push to remote with -u flag if needed
1334. Push to remote with -u flag if needed
103
134
1045. Analyze changes in <pr_analysis> tags:
1355. Analyze changes in <pr_analysis> tags:
@@ -108,30 +139,27 @@ Use gh command for ALL GitHub tasks. When user asks to create PR:
108 - Assess project impact
139 - Assess project impact
109 - Don't use tools beyond git context
140 - Don't use tools beyond git context
110 - Check for sensitive information
141 - Check for sensitive information
142+
143+6. Draft a PR message:
144+ - Follow <git_message_quality>
111 - Draft concise (1-2 bullet points) PR summary focusing on "why"
145 - Draft concise (1-2 bullet points) PR summary focusing on "why"
112 - Ensure summary reflects ALL changes since main divergence
146 - Ensure summary reflects ALL changes since main divergence
113− - Clear, concise language
147+ - Use clear, concise language
114− - Accurate reflection of changes and purpose
148+ - Provide an accurate reflection of changes and purpose
115− - Avoid generic summaries
149+ - Avoid generic summaries; messages should be thoughtful
116− - Review draft
150+ - Review draft against the litmus test before creating or updating the PR
117
151
118−6. Create PR with gh pr create using HEREDOC:
152+7. Create PR with gh pr create using HEREDOC:
119 gh pr create --title "title" --body "$(cat <<'EOF'
153 gh pr create --title "title" --body "$(cat <<'EOF'
120
154
121− ## Summary
155+<summary>
122−
123− <1-3 bullet points>
124−
125− ## Test plan
126
156
127− [Checklist of TODOs...]
157+{{ if .Attribution.GeneratedWith -}}
128−
158+💘 Generated with Crush
129−{{ if .Attribution.GeneratedWith}}
159+{{- end }}
130− 💘 Generated with Crush
131−{{ end }}
132
160
133− EOF
161+EOF
134− )"
162+)"
135
163
136Important:
164Important:
137
165
internal/agent/tools/bash_test.go+29
@@ -3,7 +3,9 @@ package tools
3import (
3import (
4 "context"
4 "context"
5 "encoding/json"
5 "encoding/json"
6+ "strings"
6 "testing"
7 "testing"
8+ "unicode/utf8"
7
9
8 "charm.land/fantasy"
10 "charm.land/fantasy"
9 "github.com/charmbracelet/crush/internal/config"
11 "github.com/charmbracelet/crush/internal/config"
@@ -182,3 +184,30 @@ func runBashTool(t *testing.T, tool fantasy.AgentTool, ctx context.Context, para
182 require.NoError(t, err)
184 require.NoError(t, err)
183 return resp
185 return resp
184}
186}
187+
188+func TestTruncateOutputValidUTF8(t *testing.T) {
189+ t.Parallel()
190+ // CJK characters are 2 cells wide; this string is far wider than
191+ // MaxOutputLength so TruncateOutput must truncate it.
192+ content := strings.Repeat("你好世界", MaxOutputLength)
193+
194+ out := TruncateOutput(content)
195+ require.True(t, utf8.ValidString(out), "truncated output must stay valid UTF-8")
196+ require.Contains(t, out, "lines truncated")
197+}
198+
199+func TestTruncateOutputShortContent(t *testing.T) {
200+ t.Parallel()
201+ content := "short output"
202+ require.Equal(t, content, TruncateOutput(content))
203+}
204+
205+func TestTruncateOutputEmoji(t *testing.T) {
206+ t.Parallel()
207+ // Emoji with ZWJ sequences should not be split.
208+ content := strings.Repeat("👨‍👩‍👧‍👦", MaxOutputLength)
209+
210+ out := TruncateOutput(content)
211+ require.True(t, utf8.ValidString(out), "truncated output must stay valid UTF-8")
212+ require.Contains(t, out, "lines truncated")
213+}
internal/agent/tools/download.go+3−3
@@ -67,7 +67,7 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
67 downloadDescription(),
67 downloadDescription(),
68 func(ctx context.Context, params DownloadParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
68 func(ctx context.Context, params DownloadParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
69 if params.URL == "" {
69 if params.URL == "" {
70− return fantasy.NewTextErrorResponse("URL parameter is required"), nil
70+ return fantasy.NewTextErrorResponse("url parameter is required"), nil
71 }
71 }
72
72
73 if params.FilePath == "" {
73 if params.FilePath == "" {
@@ -75,7 +75,7 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
75 }
75 }
76
76
77 if !strings.HasPrefix(params.URL, "http://") && !strings.HasPrefix(params.URL, "https://") {
77 if !strings.HasPrefix(params.URL, "http://") && !strings.HasPrefix(params.URL, "https://") {
78− return fantasy.NewTextErrorResponse("URL must start with http:// or https://"), nil
78+ return fantasy.NewTextErrorResponse("url must start with http:// or https://"), nil
79 }
79 }
80
80
81 filePath := filepathext.SmartJoin(workingDir, params.FilePath)
81 filePath := filepathext.SmartJoin(workingDir, params.FilePath)
@@ -131,7 +131,7 @@ func NewDownloadTool(permissions permission.Service, workingDir string, client *
131 defer resp.Body.Close()
131 defer resp.Body.Close()
132
132
133 if resp.StatusCode != http.StatusOK {
133 if resp.StatusCode != http.StatusOK {
134− return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d", resp.StatusCode)), nil
134+ return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d", resp.StatusCode)), nil
135 }
135 }
136
136
137 // Create parent directories if they don't exist
137 // Create parent directories if they don't exist
internal/agent/tools/edit.go+4−1
@@ -352,7 +352,7 @@ func replaceContent(edit editContext, filePath, oldString, newString string, rep
352
352
353 sessionID := GetSessionFromContext(edit.ctx)
353 sessionID := GetSessionFromContext(edit.ctx)
354 if sessionID == "" {
354 if sessionID == "" {
355− return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for edit a file")
355+ return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for editing a file")
356 }
356 }
357
357
358 lastRead := edit.filetracker.LastReadTime(edit.ctx, sessionID, filePath)
358 lastRead := edit.filetracker.LastReadTime(edit.ctx, sessionID, filePath)
@@ -381,6 +381,9 @@ func replaceContent(edit editContext, filePath, oldString, newString string, rep
381
381
382 if replaceAll {
382 if replaceAll {
383 newContent = strings.ReplaceAll(oldContent, oldString, newString)
383 newContent = strings.ReplaceAll(oldContent, oldString, newString)
384+ if newContent == oldContent {
385+ return oldStringNotFoundErr, nil
386+ }
384 } else {
387 } else {
385 index := strings.Index(oldContent, oldString)
388 index := strings.Index(oldContent, oldString)
386 if index == -1 {
389 if index == -1 {
internal/agent/tools/fetch.go+12−12
@@ -60,21 +60,21 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
60 fetchDescription(),
60 fetchDescription(),
61 func(ctx context.Context, params FetchParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
61 func(ctx context.Context, params FetchParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
62 if params.URL == "" {
62 if params.URL == "" {
63− return fantasy.NewTextErrorResponse("URL parameter is required"), nil
63+ return fantasy.NewTextErrorResponse("url parameter is required"), nil
64 }
64 }
65
65
66 format := strings.ToLower(params.Format)
66 format := strings.ToLower(params.Format)
67 if format != "text" && format != "markdown" && format != "html" {
67 if format != "text" && format != "markdown" && format != "html" {
68− return fantasy.NewTextErrorResponse("Format must be one of: text, markdown, html"), nil
68+ return fantasy.NewTextErrorResponse("format must be one of: text, markdown, html"), nil
69 }
69 }
70
70
71 if !strings.HasPrefix(params.URL, "http://") && !strings.HasPrefix(params.URL, "https://") {
71 if !strings.HasPrefix(params.URL, "http://") && !strings.HasPrefix(params.URL, "https://") {
72− return fantasy.NewTextErrorResponse("URL must start with http:// or https://"), nil
72+ return fantasy.NewTextErrorResponse("url must start with http:// or https://"), nil
73 }
73 }
74
74
75 sessionID := GetSessionFromContext(ctx)
75 sessionID := GetSessionFromContext(ctx)
76 if sessionID == "" {
76 if sessionID == "" {
77− return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for creating a new file")
77+ return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for fetching content")
78 }
78 }
79
79
80 p, err := permissions.Request(
80 p, err := permissions.Request(
@@ -124,19 +124,19 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
124 defer resp.Body.Close()
124 defer resp.Body.Close()
125
125
126 if resp.StatusCode != http.StatusOK {
126 if resp.StatusCode != http.StatusOK {
127− return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d", resp.StatusCode)), nil
127+ return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d", resp.StatusCode)), nil
128 }
128 }
129
129
130 body, err := io.ReadAll(io.LimitReader(resp.Body, MaxFetchSize))
130 body, err := io.ReadAll(io.LimitReader(resp.Body, MaxFetchSize))
131 if err != nil {
131 if err != nil {
132− return fantasy.NewTextErrorResponse("Failed to read response body: " + err.Error()), nil
132+ return fantasy.NewTextErrorResponse("failed to read response body: " + err.Error()), nil
133 }
133 }
134
134
135 content := string(body)
135 content := string(body)
136
136
137 validUTF8 := utf8.ValidString(content)
137 validUTF8 := utf8.ValidString(content)
138 if !validUTF8 {
138 if !validUTF8 {
139− return fantasy.NewTextErrorResponse("Response content is not valid UTF-8"), nil
139+ return fantasy.NewTextErrorResponse("response content is not valid UTF-8"), nil
140 }
140 }
141 contentType := resp.Header.Get("Content-Type")
141 contentType := resp.Header.Get("Content-Type")
142
142
@@ -145,7 +145,7 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
145 if strings.Contains(contentType, "text/html") {
145 if strings.Contains(contentType, "text/html") {
146 text, err := extractTextFromHTML(content)
146 text, err := extractTextFromHTML(content)
147 if err != nil {
147 if err != nil {
148− return fantasy.NewTextErrorResponse("Failed to extract text from HTML: " + err.Error()), nil
148+ return fantasy.NewTextErrorResponse("failed to extract text from HTML: " + err.Error()), nil
149 }
149 }
150 content = text
150 content = text
151 }
151 }
@@ -154,7 +154,7 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
154 if strings.Contains(contentType, "text/html") {
154 if strings.Contains(contentType, "text/html") {
155 markdown, err := convertHTMLToMarkdown(content)
155 markdown, err := convertHTMLToMarkdown(content)
156 if err != nil {
156 if err != nil {
157− return fantasy.NewTextErrorResponse("Failed to convert HTML to Markdown: " + err.Error()), nil
157+ return fantasy.NewTextErrorResponse("failed to convert HTML to Markdown: " + err.Error()), nil
158 }
158 }
159 content = markdown
159 content = markdown
160 }
160 }
@@ -166,14 +166,14 @@ func NewFetchTool(permissions permission.Service, workingDir string, client *htt
166 if strings.Contains(contentType, "text/html") {
166 if strings.Contains(contentType, "text/html") {
167 doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
167 doc, err := goquery.NewDocumentFromReader(strings.NewReader(content))
168 if err != nil {
168 if err != nil {
169− return fantasy.NewTextErrorResponse("Failed to parse HTML: " + err.Error()), nil
169+ return fantasy.NewTextErrorResponse("failed to parse HTML: " + err.Error()), nil
170 }
170 }
171 body, err := doc.Find("body").Html()
171 body, err := doc.Find("body").Html()
172 if err != nil {
172 if err != nil {
173− return fantasy.NewTextErrorResponse("Failed to extract body from HTML: " + err.Error()), nil
173+ return fantasy.NewTextErrorResponse("failed to extract body from HTML: " + err.Error()), nil
174 }
174 }
175 if body == "" {
175 if body == "" {
176− return fantasy.NewTextErrorResponse("No body content found in HTML"), nil
176+ return fantasy.NewTextErrorResponse("no body content found in HTML"), nil
177 }
177 }
178 content = "<html>\n<body>\n" + body + "\n</body>\n</html>"
178 content = "<html>\n<body>\n" + body + "\n</body>\n</html>"
179 }
179 }
internal/agent/tools/glob.go+75−18
@@ -1,6 +1,7 @@
1package tools
1package tools
2
2
3import (
3import (
4+ "bufio"
4 "bytes"
5 "bytes"
5 "cmp"
6 "cmp"
6 "context"
7 "context"
@@ -14,6 +15,7 @@ import (
14 "strings"
15 "strings"
15
16
16 "charm.land/fantasy"
17 "charm.land/fantasy"
18+ "github.com/charmbracelet/crush/internal/config"
17 "github.com/charmbracelet/crush/internal/filepathext"
19 "github.com/charmbracelet/crush/internal/filepathext"
18 "github.com/charmbracelet/crush/internal/fsext"
20 "github.com/charmbracelet/crush/internal/fsext"
19)
21)
@@ -48,7 +50,7 @@ type GlobResponseMetadata struct {
48 Truncated bool `json:"truncated"`
50 Truncated bool `json:"truncated"`
49}
51}
50
52
51−func NewGlobTool(workingDir string) fantasy.AgentTool {
53+func NewGlobTool(workingDir string, cfg config.ToolGlob) fantasy.AgentTool {
52 return fantasy.NewAgentTool(
54 return fantasy.NewAgentTool(
53 GlobToolName,
55 GlobToolName,
54 globDescription(),
56 globDescription(),
@@ -59,7 +61,13 @@ func NewGlobTool(workingDir string) fantasy.AgentTool {
59
61
60 searchPath := cmp.Or(params.Path, workingDir)
62 searchPath := cmp.Or(params.Path, workingDir)
61
63
62− files, truncated, err := globFiles(ctx, params.Pattern, searchPath, 100)
64+ // Bound the search so a huge or symlink-heavy root (e.g. $HOME
65+ // or a module cache) fails cleanly instead of pinning the CPU
66+ // and hanging the agent.
67+ searchCtx, cancel := context.WithTimeout(ctx, cfg.GetTimeout())
68+ defer cancel()
69+
70+ files, truncated, err := globFiles(searchCtx, params.Pattern, searchPath, 100)
63 if err != nil {
71 if err != nil {
64 return fantasy.NewTextErrorResponse(fmt.Sprintf("error finding files: %v", err)), nil
72 return fantasy.NewTextErrorResponse(fmt.Sprintf("error finding files: %v", err)), nil
65 }
73 }
@@ -87,38 +95,87 @@ func NewGlobTool(workingDir string) fantasy.AgentTool {
87}
95}
88
96
89func globFiles(ctx context.Context, pattern, searchPath string, limit int) ([]string, bool, error) {
97func globFiles(ctx context.Context, pattern, searchPath string, limit int) ([]string, bool, error) {
90− cmdRg := getRgCmd(ctx, pattern)
98+ // Scope the walk to the pattern's literal directory prefix. A pattern
99+ // like "internal/agent/*.go" only needs to walk "internal/agent", so we
100+ // start there instead of enumerating the entire tree and filtering.
101+ // Patterns that begin with a wildcard (e.g. "**/foo.go") have no prefix
102+ // and still walk from searchPath.
103+ prefix, rest := filepathext.SplitGlobPrefix(pattern)
104+ walkRoot := searchPath
105+ walkPattern := pattern
106+ if prefix != "" {
107+ walkRoot = filepath.Join(searchPath, prefix)
108+ walkPattern = rest
109+ }
110+
111+ cmdRg := getRgCmd(ctx, walkPattern)
91 if cmdRg != nil {
112 if cmdRg != nil {
92− cmdRg.Dir = searchPath
113+ cmdRg.Dir = walkRoot
93− matches, err := runRipgrep(cmdRg, searchPath, limit)
114+ matches, err := runRipgrep(cmdRg, walkRoot, limit)
94 if err == nil {
115 if err == nil {
95 return matches, len(matches) >= limit && limit > 0, nil
116 return matches, len(matches) >= limit && limit > 0, nil
96 }
117 }
97 slog.Warn("Ripgrep execution failed, falling back to doublestar", "error", err)
118 slog.Warn("Ripgrep execution failed, falling back to doublestar", "error", err)
98 }
119 }
99
120
100− return fsext.GlobGitignoreAware(pattern, searchPath, limit)
121+ return fsext.GlobGitignoreAwareCtx(ctx, walkPattern, walkRoot, limit)
101}
122}
102
123
103func runRipgrep(cmd *exec.Cmd, searchRoot string, limit int) ([]string, error) {
124func runRipgrep(cmd *exec.Cmd, searchRoot string, limit int) ([]string, error) {
104− out, err := cmd.CombinedOutput()
125+ // Stream ripgrep's stdout instead of buffering the whole file list.
126+ // Over a huge root (e.g. $HOME) the full --files listing can be
127+ // hundreds of MB; reading it all at once and then sorting allocated
128+ // gigabytes. We read incrementally and stop once we have a bounded
129+ // pool of candidates.
130+ //
131+ // We collect more than `limit` so the shortest-path preference below
132+ // still has something to choose from, but the pool is capped so memory
133+ // stays small (a few thousand paths) no matter how large the tree is.
134+ candidatePool := max(limit*20, 1000)
135+
136+ stdout, err := cmd.StdoutPipe()
105 if err != nil {
137 if err != nil {
106− if ee, ok := err.(*exec.ExitError); ok && ee.ExitCode() == 1 {
138+ return nil, fmt.Errorf("ripgrep: %w", err)
107− return nil, nil
139+ }
108− }
140+ var stderr bytes.Buffer
109− return nil, fmt.Errorf("ripgrep: %w\n%s", err, out)
141+ cmd.Stderr = &stderr
142+
143+ if err := cmd.Start(); err != nil {
144+ return nil, fmt.Errorf("ripgrep: %w", err)
110 }
145 }
111
146
112 var matches []string
147 var matches []string
113− for p := range bytes.SplitSeq(out, []byte{0}) {
148+ reader := bufio.NewReader(stdout)
114− if len(p) == 0 {
149+ for {
115− continue
150+ path, err := reader.ReadString(0)
151+ if len(path) > 0 {
152+ path = strings.TrimRight(path, "\x00")
153+ if path != "" {
154+ absPath := filepathext.SmartJoin(searchRoot, path)
155+ if !fsext.SkipHidden(absPath) {
156+ matches = append(matches, absPath)
157+ }
158+ }
159+ }
160+ if err != nil {
161+ break // EOF or read error; drain handled by Wait below.
116 }
162 }
117− absPath := filepathext.SmartJoin(searchRoot, string(p))
163+ if len(matches) >= candidatePool {
118− if fsext.SkipHidden(absPath) {
164+ // Enough candidates; stop reading and let the process be
119− continue
165+ // killed by the command context / Wait. Draining the rest
166+ // would just buffer paths we are going to discard.
167+ break
168+ }
169+ }
170+
171+ // Close our end so ripgrep gets SIGPIPE and stops, then reap it.
172+ _ = stdout.Close()
173+ waitErr := cmd.Wait()
174+ if waitErr != nil && len(matches) == 0 {
175+ if ee, ok := waitErr.(*exec.ExitError); ok && ee.ExitCode() == 1 {
176+ return nil, nil // No matches.
120 }
177 }
121− matches = append(matches, absPath)
178+ return nil, fmt.Errorf("ripgrep: %w\n%s", waitErr, stderr.String())
122 }
179 }
123
180
124 sort.SliceStable(matches, func(i, j int) bool {
181 sort.SliceStable(matches, func(i, j int) bool {
internal/agent/tools/glob_test.gonew file+74
@@ -0,0 +1,74 @@
1+package tools
2+
3+import (
4+ "context"
5+ "os"
6+ "path/filepath"
7+ "testing"
8+
9+ "github.com/stretchr/testify/require"
10+)
11+
12+func TestGlobFilesScopedPrefixMatchesUnscoped(t *testing.T) {
13+ t.Parallel()
14+
15+ root := t.TempDir()
16+ mkfile := func(rel string) {
17+ full := filepath.Join(root, rel)
18+ require.NoError(t, os.MkdirAll(filepath.Dir(full), 0o755))
19+ require.NoError(t, os.WriteFile(full, []byte("x"), 0o644))
20+ }
21+ mkfile("a/b/one.go")
22+ mkfile("a/b/c/two.go")
23+ mkfile("a/other.txt")
24+ mkfile("z/three.go")
25+
26+ got, _, err := globFiles(context.Background(), "a/**/*.go", root, 100)
27+ require.NoError(t, err)
28+ require.Len(t, got, 2)
29+ for _, p := range got {
30+ require.Contains(t, p, filepath.Join("a", "b"))
31+ }
32+}
33+
34+func TestGlobFilesDoesNotFollowSymlinkEscape(t *testing.T) {
35+ t.Parallel()
36+
37+ // Build a project dir with a symlink pointing outside it. With symlink
38+ // following disabled, the glob must not pick up files behind the link.
39+ outside := t.TempDir()
40+ require.NoError(t, os.WriteFile(filepath.Join(outside, "secret.go"), []byte("x"), 0o644))
41+
42+ project := t.TempDir()
43+ require.NoError(t, os.WriteFile(filepath.Join(project, "in.go"), []byte("x"), 0o644))
44+ link := filepath.Join(project, "escape")
45+ if err := os.Symlink(outside, link); err != nil {
46+ t.Skipf("symlinks unsupported: %v", err)
47+ }
48+
49+ got, _, err := globFiles(context.Background(), "**/*.go", project, 100)
50+ require.NoError(t, err)
51+ for _, p := range got {
52+ require.NotContains(t, p, "secret.go", "glob followed a symlink out of the search root")
53+ }
54+}
55+
56+func TestGlobFilesCapsResultsOnLargeTree(t *testing.T) {
57+ t.Parallel()
58+
59+ // A tree with far more matches than the limit must still return at
60+ // most `limit` results and report truncation, regardless of which
61+ // backend (ripgrep or the doublestar fallback) runs.
62+ root := t.TempDir()
63+ for i := range 500 {
64+ dir := filepath.Join(root, "pkg")
65+ require.NoError(t, os.MkdirAll(dir, 0o755))
66+ name := filepath.Join(dir, "file"+string(rune('a'+i%26))+string(rune('a'+(i/26)%26))+"_"+string(rune('0'+i%10))+".go")
67+ require.NoError(t, os.WriteFile(name, []byte("x"), 0o644))
68+ }
69+
70+ got, truncated, err := globFiles(context.Background(), "**/*.go", root, 10)
71+ require.NoError(t, err)
72+ require.LessOrEqual(t, len(got), 10, "must not exceed limit")
73+ require.True(t, truncated, "should report truncation on an over-limit tree")
74+}
internal/agent/tools/grep.go+14−6
@@ -23,6 +23,7 @@ import (
23 "github.com/charmbracelet/crush/internal/config"
23 "github.com/charmbracelet/crush/internal/config"
24 "github.com/charmbracelet/crush/internal/csync"
24 "github.com/charmbracelet/crush/internal/csync"
25 "github.com/charmbracelet/crush/internal/fsext"
25 "github.com/charmbracelet/crush/internal/fsext"
26+ "github.com/charmbracelet/x/ansi"
26)
27)
27
28
28// regexCache provides thread-safe caching of compiled regex patterns
29// regexCache provides thread-safe caching of compiled regex patterns
@@ -161,8 +162,8 @@ func NewGrepTool(workingDir string, config config.ToolGrep) fantasy.AgentTool {
161 }
162 }
162 if match.lineNum > 0 {
163 if match.lineNum > 0 {
163 lineText := match.lineText
164 lineText := match.lineText
164− if len(lineText) > maxGrepContentWidth {
165+ if ansi.StringWidth(lineText) > maxGrepContentWidth {
165− lineText = lineText[:maxGrepContentWidth] + "..."
166+ lineText = ansi.Truncate(lineText, maxGrepContentWidth, "...")
166 }
167 }
167 if match.charNum > 0 {
168 if match.charNum > 0 {
168 fmt.Fprintf(&output, " Line %d, Char %d: %s\n", match.lineNum, match.charNum, lineText)
169 fmt.Fprintf(&output, " Line %d, Char %d: %s\n", match.lineNum, match.charNum, lineText)
@@ -234,6 +235,8 @@ func searchWithRipgrep(ctx context.Context, pattern, path, include string) ([]gr
234 }
235 }
235
236
236 var matches []grepMatch
237 var matches []grepMatch
238+ // modTime is only used for sorting; stat each unique path once.
239+ modTimes := make(map[string]time.Time)
237 for line := range bytes.SplitSeq(bytes.TrimSpace(output), []byte{'\n'}) {
240 for line := range bytes.SplitSeq(bytes.TrimSpace(output), []byte{'\n'}) {
238 if len(line) == 0 {
241 if len(line) == 0 {
239 continue
242 continue
@@ -246,13 +249,18 @@ func searchWithRipgrep(ctx context.Context, pattern, path, include string) ([]gr
246 continue
249 continue
247 }
250 }
248 for _, m := range match.Data.Submatches {
251 for _, m := range match.Data.Submatches {
249− fi, err := os.Stat(match.Data.Path.Text)
252+ modTime, ok := modTimes[match.Data.Path.Text]
250− if err != nil {
253+ if !ok {
251− continue // Skip files we can't access
254+ fi, err := os.Stat(match.Data.Path.Text)
255+ if err != nil {
256+ continue // Skip files we can't access
257+ }
258+ modTime = fi.ModTime()
259+ modTimes[match.Data.Path.Text] = modTime
252 }
260 }
253 matches = append(matches, grepMatch{
261 matches = append(matches, grepMatch{
254 path: match.Data.Path.Text,
262 path: match.Data.Path.Text,
255− modTime: fi.ModTime(),
263+ modTime: modTime,
256 lineNum: match.Data.LineNumber,
264 lineNum: match.Data.LineNumber,
257 charNum: m.Start + 1, // ensure 1-based
265 charNum: m.Start + 1, // ensure 1-based
258 lineText: strings.TrimSpace(match.Data.Lines.Text),
266 lineText: strings.TrimSpace(match.Data.Lines.Text),
internal/agent/tools/ls.go+1−1
@@ -163,7 +163,7 @@ func ListDirectoryTree(searchPath string, params LSParams, lsConfig config.ToolL
163 output = fmt.Sprintf("There are more than %d files in the directory. Use a more specific path or use the Glob tool to find specific files. The first %[1]d files and directories are included below.\n", maxFiles)
163 output = fmt.Sprintf("There are more than %d files in the directory. Use a more specific path or use the Glob tool to find specific files. The first %[1]d files and directories are included below.\n", maxFiles)
164 }
164 }
165 if depth > 0 {
165 if depth > 0 {
166− output = fmt.Sprintf("The directory tree is shown up to a depth of %d. Use a higher depth and a specific path to see more levels.\n", cmp.Or(params.Depth, depth))
166+ output += fmt.Sprintf("The directory tree is shown up to a depth of %d. Use a higher depth and a specific path to see more levels.\n", cmp.Or(params.Depth, depth))
167 }
167 }
168 return output + "\n" + printTree(tree, searchPath), metadata, nil
168 return output + "\n" + printTree(tree, searchPath), metadata, nil
169}
169}
internal/agent/tools/mcp-tools.go+2−2
@@ -99,7 +99,7 @@ func (m *Tool) Info() fantasy.ToolInfo {
99func (m *Tool) Run(ctx context.Context, params fantasy.ToolCall) (fantasy.ToolResponse, error) {
99func (m *Tool) Run(ctx context.Context, params fantasy.ToolCall) (fantasy.ToolResponse, error) {
100 sessionID := GetSessionFromContext(ctx)
100 sessionID := GetSessionFromContext(ctx)
101 if sessionID == "" {
101 if sessionID == "" {
102− return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for creating a new file")
102+ return fantasy.ToolResponse{}, fmt.Errorf("session ID is required for executing MCP tool")
103 }
103 }
104
104
105 // Skip permission for whitelisted Docker MCP tools.
105 // Skip permission for whitelisted Docker MCP tools.
@@ -134,7 +134,7 @@ func (m *Tool) Run(ctx context.Context, params fantasy.ToolCall) (fantasy.ToolRe
134 case "image", "media":
134 case "image", "media":
135 if !GetSupportsImagesFromContext(ctx) {
135 if !GetSupportsImagesFromContext(ctx) {
136 modelName := GetModelNameFromContext(ctx)
136 modelName := GetModelNameFromContext(ctx)
137− return fantasy.NewTextErrorResponse(fmt.Sprintf("This model (%s) does not support image data.", modelName)), nil
137+ return fantasy.NewTextErrorResponse(fmt.Sprintf("this model (%s) does not support image data.", modelName)), nil
138 }
138 }
139
139
140 var response fantasy.ToolResponse
140 var response fantasy.ToolResponse
internal/agent/tools/mcp/init.go+22−3
@@ -55,11 +55,19 @@ func (s *ClientSession) Close() error {
55var (
55var (
56 sessions = csync.NewMap[string, *ClientSession]()
56 sessions = csync.NewMap[string, *ClientSession]()
57 states = csync.NewMap[string, ClientInfo]()
57 states = csync.NewMap[string, ClientInfo]()
58− broker = pubsub.NewBroker[Event]()
58+ // sessionLastOK records the last time a session was confirmed alive
59− initOnce sync.Once
59+ // (successful ping or freshly created). Used to skip redundant pings
60− initDone = make(chan struct{})
60+ // within livenessTTL before each MCP tool call.
61+ sessionLastOK = csync.NewMap[string, time.Time]()
62+ broker = pubsub.NewBroker[Event]()
63+ initOnce sync.Once
64+ initDone = make(chan struct{})
61)
65)
62
66
67+// livenessTTL is how long a session is trusted to be alive after a successful
68+// ping/create before getOrRenewClient pings it again.
69+const livenessTTL = 30 * time.Second
70+
63// State represents the current state of an MCP client
71// State represents the current state of an MCP client
64type State int
72type State int
65
73
@@ -260,6 +268,7 @@ func initClient(ctx context.Context, cfg *config.ConfigStore, name string, m con
260 toolCount := updateTools(cfg, name, tools)
268 toolCount := updateTools(cfg, name, tools)
261 updatePrompts(name, prompts)
269 updatePrompts(name, prompts)
262 sessions.Set(name, session)
270 sessions.Set(name, session)
271+ sessionLastOK.Set(name, time.Now())
263
272
264 updateState(name, StateConnected, nil, session, Counts{
273 updateState(name, StateConnected, nil, session, Counts{
265 Tools: toolCount,
274 Tools: toolCount,
@@ -280,6 +289,7 @@ func DisableSingle(cfg *config.ConfigStore, name string) error {
280 slog.Warn("Error closing MCP session", "name", name, "error", err)
289 slog.Warn("Error closing MCP session", "name", name, "error", err)
281 }
290 }
282 sessions.Del(name)
291 sessions.Del(name)
292+ sessionLastOK.Del(name)
283 }
293 }
284
294
285 // Clear tools and prompts for this MCP.
295 // Clear tools and prompts for this MCP.
@@ -299,6 +309,11 @@ func getOrRenewClient(ctx context.Context, cfg *config.ConfigStore, name string)
299 return nil, fmt.Errorf("mcp '%s' not available", name)
309 return nil, fmt.Errorf("mcp '%s' not available", name)
300 }
310 }
301
311
312+ // Skip the ping if this session was confirmed alive very recently.
313+ if last, ok := sessionLastOK.Get(name); ok && time.Since(last) < livenessTTL {
314+ return sess, nil
315+ }
316+
302 m := cfg.Config().MCP[name]
317 m := cfg.Config().MCP[name]
303 state, _ := states.Get(name)
318 state, _ := states.Get(name)
304
319
@@ -307,8 +322,10 @@ func getOrRenewClient(ctx context.Context, cfg *config.ConfigStore, name string)
307 defer cancel()
322 defer cancel()
308 err := sess.Ping(pingCtx, nil)
323 err := sess.Ping(pingCtx, nil)
309 if err == nil {
324 if err == nil {
325+ sessionLastOK.Set(name, time.Now())
310 return sess, nil
326 return sess, nil
311 }
327 }
328+ sessionLastOK.Del(name)
312 updateState(name, StateError, maybeTimeoutErr(err, timeout), nil, state.Counts)
329 updateState(name, StateError, maybeTimeoutErr(err, timeout), nil, state.Counts)
313
330
314 sess, err = createSession(ctx, name, m, cfg.Resolver())
331 sess, err = createSession(ctx, name, m, cfg.Resolver())
@@ -318,6 +335,7 @@ func getOrRenewClient(ctx context.Context, cfg *config.ConfigStore, name string)
318
335
319 updateState(name, StateConnected, nil, sess, state.Counts)
336 updateState(name, StateConnected, nil, sess, state.Counts)
320 sessions.Set(name, sess)
337 sessions.Set(name, sess)
338+ sessionLastOK.Set(name, time.Now())
321 return sess, nil
339 return sess, nil
322}
340}
323
341
@@ -335,6 +353,7 @@ func updateState(name string, state State, err error, client *ClientSession, cou
335 info.ConnectedAt = time.Now()
353 info.ConnectedAt = time.Now()
336 case StateError:
354 case StateError:
337 sessions.Del(name)
355 sessions.Del(name)
356+ sessionLastOK.Del(name)
338 }
357 }
339 states.Set(name, info)
358 states.Set(name, info)
340
359
internal/agent/tools/mcp/tools.go+14
@@ -206,6 +206,20 @@ func ensureRawBytes(data []byte) []byte {
206}
206}
207
207
208func normalizeBase64Input(data []byte) []byte {
208func normalizeBase64Input(data []byte) []byte {
209+ // Fast path: if the data is all-ASCII and contains no whitespace, there is
210+ // nothing for strings.Fields to strip, so avoid copying the (potentially
211+ // multi-MB) payload. Bytes >= 0x80 could be part of a non-ASCII Unicode
212+ // space that strings.Fields would strip, so fall back to the slow path.
213+ fast := true
214+ for _, b := range data {
215+ if b >= 0x80 || b == ' ' || b == '\t' || b == '\n' || b == '\v' || b == '\f' || b == '\r' {
216+ fast = false
217+ break
218+ }
219+ }
220+ if fast {
221+ return data
222+ }
209 normalized := strings.Join(strings.Fields(string(data)), "")
223 normalized := strings.Join(strings.Fields(string(data)), "")
210 return []byte(normalized)
224 return []byte(normalized)
211}
225}
internal/agent/tools/multiedit.go−1
@@ -445,7 +445,6 @@ func applyEditToContent(content string, edit MultiEditOperation) (string, error)
445 }
445 }
446
446
447 newContent = content[:index] + edit.NewString + content[index+len(edit.OldString):]
447 newContent = content[:index] + edit.NewString + content[index+len(edit.OldString):]
448− replacementCount = 1
449 }
448 }
450
449
451 return newContent, nil
450 return newContent, nil
internal/agent/tools/references.go−8
@@ -24,10 +24,6 @@ type ReferencesParams struct {
24 Path string `json:"path,omitempty" description:"The directory to search in. Use a directory/file to narrow down the symbol search. Defaults to the current working directory."`
24 Path string `json:"path,omitempty" description:"The directory to search in. Use a directory/file to narrow down the symbol search. Defaults to the current working directory."`
25}
25}
26
26
27−type referencesTool struct {
28− lspManager *lsp.Manager
29−}
30−
31const ReferencesToolName = "lsp_references"
27const ReferencesToolName = "lsp_references"
32
28
33//go:embed references.md
29//go:embed references.md
@@ -91,10 +87,6 @@ func NewReferencesTool(lspManager *lsp.Manager) fantasy.AgentTool {
91 )
87 )
92}
88}
93
89
94−func (r *referencesTool) Name() string {
95− return ReferencesToolName
96−}
97−
98func find(ctx context.Context, lspManager *lsp.Manager, symbol string, match grepMatch) ([]protocol.Location, error) {
90func find(ctx context.Context, lspManager *lsp.Manager, symbol string, match grepMatch) ([]protocol.Location, error) {
99 absPath, err := filepath.Abs(match.path)
91 absPath, err := filepath.Abs(match.path)
100 if err != nil {
92 if err != nil {
internal/agent/tools/rg.go+6−1
@@ -31,7 +31,12 @@ func getRgCmd(ctx context.Context, globPattern string) *exec.Cmd {
31 if name == "" {
31 if name == "" {
32 return nil
32 return nil
33 }
33 }
34− args := []string{"--files", "-L", "--null"}
34+ // Note: we intentionally do not pass -L (follow symlinks). Following
35+ // symlinks lets rg escape the search root (into module caches, the nix
36+ // store, $HOME, etc.) and chase cycles, which pins all cores and can
37+ // hang. This keeps glob scoped to the tree it was pointed at, matching
38+ // the grep search command.
39+ args := []string{"--files", "--null"}
35 if globPattern != "" {
40 if globPattern != "" {
36 if !filepath.IsAbs(globPattern) && !strings.HasPrefix(globPattern, "/") {
41 if !filepath.IsAbs(globPattern) && !strings.HasPrefix(globPattern, "/") {
37 globPattern = "/" + globPattern
42 globPattern = "/" + globPattern
internal/agent/tools/safe.go+95−22
@@ -2,10 +2,16 @@ package tools
2
2
3import (
3import (
4 "runtime"
4 "runtime"
5− "slices"
6 "strings"
5 "strings"
6+
7+ "mvdan.cc/sh/v3/syntax"
7)
8)
8
9
10+// safeCommands are read-only commands that can run without a permission
11+// prompt. Entries may be multi-word (e.g. "git log") to scope a
12+// subcommand. Do NOT add wrapper commands that execute an arbitrary
13+// argument (env, time, timeout, nohup, nice, xargs, sh, bash, find -exec,
14+// ...): those would let an unapproved command ride in on a safe prefix.
9var safeCommands = []string{
15var safeCommands = []string{
10 // Bash builtins and core utils
16 // Bash builtins and core utils
11 "cal",
17 "cal",
@@ -13,7 +19,6 @@ var safeCommands = []string{
13 "df",
19 "df",
14 "du",
20 "du",
15 "echo",
21 "echo",
16− "env",
17 "free",
22 "free",
18 "groups",
23 "groups",
19 "hostname",
24 "hostname",
@@ -21,14 +26,10 @@ var safeCommands = []string{
21 "kill",
26 "kill",
22 "killall",
27 "killall",
23 "ls",
28 "ls",
24− "nice",
25− "nohup",
26 "printenv",
29 "printenv",
27 "ps",
30 "ps",
28 "pwd",
31 "pwd",
29 "set",
32 "set",
30− "time",
31− "timeout",
32 "top",
33 "top",
33 "type",
34 "type",
34 "uname",
35 "uname",
@@ -58,22 +59,6 @@ var safeCommands = []string{
58 "git tag",
59 "git tag",
59}
60}
60
61
61−var chainingMetacharacters = []string{
62− ";",
63− "|",
64− "&&",
65− "$(",
66− "`",
67−}
68−
69−// containsCommandChaining reports whether s contains shell metacharacters
70−// that enable command chaining or substitution.
71−func containsCommandChaining(s string) bool {
72− return slices.ContainsFunc(chainingMetacharacters, func(c string) bool {
73− return strings.Contains(s, c)
74− })
75−}
76−
77func init() {
62func init() {
78 if runtime.GOOS == "windows" {
63 if runtime.GOOS == "windows" {
79 safeCommands = append(
64 safeCommands = append(
@@ -87,4 +72,92 @@ func init() {
87 "where",
72 "where",
88 )
73 )
89 }
74 }
75+
76+ // Precompute the tokenized form of each safe command once, so
77+ // isSafeReadOnly doesn't re-split on every call.
78+ safeCommandTokens = make([][]string, len(safeCommands))
79+ for i, safeCmd := range safeCommands {
80+ safeCommandTokens[i] = strings.Fields(safeCmd)
81+ }
82+}
83+
84+// safeCommandTokens holds the tokenized form of safeCommands, populated in
85+// init after any platform-specific entries are appended.
86+var safeCommandTokens [][]string
87+
88+// isSafeReadOnly reports whether command is a single, simple, read-only
89+// command that can run without a permission prompt.
90+//
91+// It parses the command and only returns true when the whole input is
92+// exactly one simple command (no pipes, chaining, subshells, blocks, or
93+// negation), with no redirections, no backgrounding, no inline variable
94+// assignments (which could inject e.g. LD_PRELOAD), and no command or
95+// process substitution anywhere. The command name (and any subcommand
96+// tokens) must be plain literals matching an entry in safeCommands.
97+//
98+// This replaces raw-string prefix matching, which let wrapper commands
99+// and redirects/chaining smuggle unapproved commands past the gate
100+// (e.g. "time rm -rf x", "echo x > file", "echo hi & rm -rf x").
101+func isSafeReadOnly(command string) bool {
102+ parser := syntax.NewParser()
103+ file, err := parser.Parse(strings.NewReader(command), "")
104+ if err != nil {
105+ return false
106+ }
107+
108+ // Exactly one statement, and it must be a plain foreground command.
109+ if len(file.Stmts) != 1 {
110+ return false
111+ }
112+ stmt := file.Stmts[0]
113+ if stmt.Background || stmt.Negated || len(stmt.Redirs) > 0 {
114+ return false
115+ }
116+ call, ok := stmt.Cmd.(*syntax.CallExpr)
117+ if !ok || len(call.Args) == 0 || len(call.Assigns) > 0 {
118+ return false
119+ }
120+
121+ // Reject any command/process substitution anywhere in the statement:
122+ // those execute arbitrary commands the allowlist never sees.
123+ safe := true
124+ syntax.Walk(file, func(node syntax.Node) bool {
125+ switch node.(type) {
126+ case *syntax.CmdSubst, *syntax.ProcSubst:
127+ safe = false
128+ return false
129+ }
130+ return true
131+ })
132+ if !safe {
133+ return false
134+ }
135+
136+ // Extract literal argv. Non-literal words (quoting, parameter
137+ // expansion, globbing) yield "" via Word.Lit(); the command name and
138+ // any matched subcommand tokens must be plain literals.
139+ argv := make([]string, len(call.Args))
140+ for i, w := range call.Args {
141+ argv[i] = w.Lit()
142+ }
143+ if argv[0] == "" {
144+ return false
145+ }
146+
147+ for _, tokens := range safeCommandTokens {
148+ if len(argv) < len(tokens) {
149+ continue
150+ }
151+ match := true
152+ for i, tok := range tokens {
153+ if argv[i] != tok {
154+ match = false
155+ break
156+ }
157+ }
158+ if match {
159+ return true
160+ }
161+ }
162+ return false
90}
163}
internal/agent/tools/safe_test.go+51−24
@@ -6,7 +6,7 @@ import (
6 "github.com/stretchr/testify/assert"
6 "github.com/stretchr/testify/assert"
7)
7)
8
8
9−func TestContainsCommandChaining(t *testing.T) {
9+func TestIsSafeReadOnly(t *testing.T) {
10 t.Parallel()
10 t.Parallel()
11
11
12 tests := []struct {
12 tests := []struct {
@@ -14,34 +14,61 @@ func TestContainsCommandChaining(t *testing.T) {
14 input string
14 input string
15 expected bool
15 expected bool
16 }{
16 }{
17− {"plain ls", "ls -la", false},
17+ // Plain safe commands.
18− {"plain echo", "echo hello world", false},
18+ {"plain ls", "ls -la", true},
19− {"plain pwd", "pwd", false},
19+ {"plain echo", "echo hello world", true},
20− {"plain git status", "git status", false},
20+ {"plain pwd", "pwd", true},
21− {"ls with redirect", "ls > /tmp/out", false},
21+ {"git status", "git status", true},
22− {"ls with pipe", "ls | grep foo", true},
22+ {"git log with flags", "git log --oneline", true},
23− {"ls with double ampersand", "ls && echo done", true},
23+ {"git config --get", "git config --get user.name", true},
24− {"ls with semicolon", "ls; echo done", true},
24+ {"echo with param expansion", "echo $HOME", true},
25− {"ls with pipe pipe", "ls || echo fail", true},
25+ {"simple kill", "kill 1234", true},
26− {"ls with backticks", "ls `echo foo`", true},
26+
27− {"ls with subshell", "ls $(echo foo)", true},
27+ // Not on the allowlist.
28− {"ls with background ampersand", "ls & echo done", false},
28+ {"rm", "rm -rf /tmp/x", false},
29− {"rm -rf with && ls (rm first)", "rm -rf / && ls", true},
29+ {"unknown", "frobnicate", false},
30− {"redirect with ampersand gt", "ls &> /dev/null", false},
30+ {"git push not allowed", "git push", false},
31− {"redirect with gt ampersand", "ls >& /dev/null", false},
31+ {"prefix is not a match (lsof)", "lsof", false},
32− {"simple kill", "kill 1234", false},
32+
33− {"kill with pipe", "kill 1234 | echo foo", true},
33+ // Chaining / multiple statements.
34− {"git log", "git log --oneline", false},
34+ {"pipe", "ls | grep foo", false},
35− {"git log with pipe", "git log | head", true},
35+ {"and", "ls && echo done", false},
36− {"empty string", "", false},
36+ {"or", "ls || echo fail", false},
37− {"dollar sign in argument", "echo $HOME", false},
37+ {"semicolon", "ls; echo done", false},
38+ {"newline", "echo hi\nrm -rf x", false},
39+ {"background then rm", "echo hi & rm -rf x", false},
40+ {"rm first with and", "rm -rf / && ls", false},
41+
42+ // Substitution.
43+ {"command subst", "ls $(rm -rf x)", false},
44+ {"backticks", "ls `rm -rf x`", false},
45+ {"param default with subst", "echo ${x:-$(rm -rf x)}", false},
46+
47+ // Redirection.
48+ {"redirect out", "echo x > /tmp/out", false},
49+ {"redirect append", "echo x >> ~/.bashrc", false},
50+ {"redirect in", "cat < /etc/passwd", false},
51+
52+ // Wrapper commands must not smuggle an unapproved command through.
53+ {"time wrapper", "time rm -rf x", false},
54+ {"env wrapper", "env FOO=bar rm -rf x", false},
55+ {"timeout wrapper", "timeout 10 rm -rf x", false},
56+ {"nohup wrapper", "nohup rm -rf x", false},
57+ {"nice wrapper", "nice rm -rf x", false},
58+
59+ // Inline assignment (e.g. LD_PRELOAD) is not safe.
60+ {"inline assignment", "LD_PRELOAD=/evil.so ls", false},
61+
62+ // Malformed / empty.
63+ {"empty", "", false},
64+ {"unbalanced quote", "echo \"unterminated", false},
38 }
65 }
39
66
40 for _, tt := range tests {
67 for _, tt := range tests {
41 t.Run(tt.name, func(t *testing.T) {
68 t.Run(tt.name, func(t *testing.T) {
42 t.Parallel()
69 t.Parallel()
43− got := containsCommandChaining(tt.input)
70+ got := isSafeReadOnly(tt.input)
44− assert.Equal(t, tt.expected, got, "containsCommandChaining(%q)", tt.input)
71+ assert.Equal(t, tt.expected, got, "isSafeReadOnly(%q)", tt.input)
45 })
72 })
46 }
73 }
47}
74}
internal/agent/tools/sourcegraph.go+4−4
@@ -64,7 +64,7 @@ func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
64 sourcegraphDescription(),
64 sourcegraphDescription(),
65 func(ctx context.Context, params SourcegraphParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
65 func(ctx context.Context, params SourcegraphParams, call fantasy.ToolCall) (fantasy.ToolResponse, error) {
66 if params.Query == "" {
66 if params.Query == "" {
67− return fantasy.NewTextErrorResponse("Query parameter is required"), nil
67+ return fantasy.NewTextErrorResponse("query parameter is required"), nil
68 }
68 }
69
69
70 if params.Count <= 0 {
70 if params.Count <= 0 {
@@ -129,10 +129,10 @@ func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
129 if resp.StatusCode != http.StatusOK {
129 if resp.StatusCode != http.StatusOK {
130 body, _ := io.ReadAll(resp.Body)
130 body, _ := io.ReadAll(resp.Body)
131 if len(body) > 0 {
131 if len(body) > 0 {
132− return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d, response: %s", resp.StatusCode, string(body))), nil
132+ return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d, response: %s", resp.StatusCode, string(body))), nil
133 }
133 }
134
134
135− return fantasy.NewTextErrorResponse(fmt.Sprintf("Request failed with status code: %d", resp.StatusCode)), nil
135+ return fantasy.NewTextErrorResponse(fmt.Sprintf("request failed with status code: %d", resp.StatusCode)), nil
136 }
136 }
137 body, err := io.ReadAll(resp.Body)
137 body, err := io.ReadAll(resp.Body)
138 if err != nil {
138 if err != nil {
@@ -146,7 +146,7 @@ func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
146
146
147 formattedResults, err := formatSourcegraphResults(result, params.ContextWindow)
147 formattedResults, err := formatSourcegraphResults(result, params.ContextWindow)
148 if err != nil {
148 if err != nil {
149− return fantasy.NewTextErrorResponse("Failed to format results: " + err.Error()), nil
149+ return fantasy.NewTextErrorResponse("failed to format results: " + err.Error()), nil
150 }
150 }
151
151
152 return fantasy.NewTextResponse(formattedResults), nil
152 return fantasy.NewTextResponse(formattedResults), nil
internal/agent/tools/view.go+28−25
@@ -12,6 +12,7 @@ import (
12 "net/http"
12 "net/http"
13 "os"
13 "os"
14 "path/filepath"
14 "path/filepath"
15+ "strconv"
15 "strings"
16 "strings"
16 "time"
17 "time"
17 "unicode/utf8"
18 "unicode/utf8"
@@ -176,19 +177,19 @@ func NewViewTool(
176 }
177 }
177
178
178 if len(suggestions) > 0 {
179 if len(suggestions) > 0 {
179− return fantasy.NewTextErrorResponse(fmt.Sprintf("File not found: %s\n\nDid you mean one of these?\n%s",
180+ return fantasy.NewTextErrorResponse(fmt.Sprintf("file not found: %s\n\nDid you mean one of these?\n%s",
180 filePath, strings.Join(suggestions, "\n"))), nil
181 filePath, strings.Join(suggestions, "\n"))), nil
181 }
182 }
182 }
183 }
183
184
184− return fantasy.NewTextErrorResponse(fmt.Sprintf("File not found: %s", filePath)), nil
185+ return fantasy.NewTextErrorResponse(fmt.Sprintf("file not found: %s", filePath)), nil
185 }
186 }
186 return fantasy.ToolResponse{}, fmt.Errorf("error accessing file: %w", err)
187 return fantasy.ToolResponse{}, fmt.Errorf("error accessing file: %w", err)
187 }
188 }
188
189
189 // Check if it's a directory
190 // Check if it's a directory
190 if fileInfo.IsDir() {
191 if fileInfo.IsDir() {
191− return fantasy.NewTextErrorResponse(fmt.Sprintf("Path is a directory, not a file: %s", filePath)), nil
192+ return fantasy.NewTextErrorResponse(fmt.Sprintf("path is a directory, not a file: %s", filePath)), nil
192 }
193 }
193
194
194 // Set default limit if not provided (no limit for SKILL.md files)
195 // Set default limit if not provided (no limit for SKILL.md files)
@@ -203,12 +204,12 @@ func NewViewTool(
203 isSupportedImage, mimeType := getImageMimeType(filePath)
204 isSupportedImage, mimeType := getImageMimeType(filePath)
204 if isSupportedImage {
205 if isSupportedImage {
205 if fileInfo.Size() > MaxViewSize {
206 if fileInfo.Size() > MaxViewSize {
206− return fantasy.NewTextErrorResponse(fmt.Sprintf("Image file is too large (%d bytes). Maximum size is %d bytes",
207+ return fantasy.NewTextErrorResponse(fmt.Sprintf("image file is too large (%d bytes). Maximum size is %d bytes",
207 fileInfo.Size(), MaxViewSize)), nil
208 fileInfo.Size(), MaxViewSize)), nil
208 }
209 }
209 if !GetSupportsImagesFromContext(ctx) {
210 if !GetSupportsImagesFromContext(ctx) {
210 modelName := GetModelNameFromContext(ctx)
211 modelName := GetModelNameFromContext(ctx)
211− return fantasy.NewTextErrorResponse(fmt.Sprintf("This model (%s) does not support image data.", modelName)), nil
212+ return fantasy.NewTextErrorResponse(fmt.Sprintf("this model (%s) does not support image data.", modelName)), nil
212 }
213 }
213
214
214 imageData, readErr := os.ReadFile(filePath)
215 imageData, readErr := os.ReadFile(filePath)
@@ -236,13 +237,13 @@ func NewViewTool(
236 if err != nil {
237 if err != nil {
237 var tooLarge contentTooLargeError
238 var tooLarge contentTooLargeError
238 if errors.As(err, &tooLarge) {
239 if errors.As(err, &tooLarge) {
239− return fantasy.NewTextErrorResponse(fmt.Sprintf("Content section is too large (%d bytes). Maximum size is %d bytes",
240+ return fantasy.NewTextErrorResponse(fmt.Sprintf("content section is too large (%d bytes). Maximum size is %d bytes",
240 tooLarge.Size, tooLarge.Max)), nil
241 tooLarge.Size, tooLarge.Max)), nil
241 }
242 }
242 return fantasy.ToolResponse{}, fmt.Errorf("error reading file: %w", err)
243 return fantasy.ToolResponse{}, fmt.Errorf("error reading file: %w", err)
243 }
244 }
244 if !utf8.ValidString(content) {
245 if !utf8.ValidString(content) {
245− return fantasy.NewTextErrorResponse("File content is not valid UTF-8"), nil
246+ return fantasy.NewTextErrorResponse("file content is not valid UTF-8"), nil
246 }
247 }
247
248
248 openInLSPs(ctx, lspManager, filePath)
249 openInLSPs(ctx, lspManager, filePath)
@@ -252,7 +253,7 @@ func NewViewTool(
252
253
253 if hasMore {
254 if hasMore {
254 output += fmt.Sprintf("\n\n(File has more lines. Use 'offset' parameter to read beyond line %d)",
255 output += fmt.Sprintf("\n\n(File has more lines. Use 'offset' parameter to read beyond line %d)",
255− params.Offset+len(strings.Split(content, "\n")))
256+ params.Offset+strings.Count(content, "\n")+1)
256 }
257 }
257 output += "\n</file>\n"
258 output += "\n</file>\n"
258 output += getDiagnostics(filePath, lspManager)
259 output += getDiagnostics(filePath, lspManager)
@@ -284,24 +285,24 @@ func addLineNumbers(content string, startLine int) string {
284 return ""
285 return ""
285 }
286 }
286
287
287− lines := strings.Split(content, "\n")
288+ var b strings.Builder
288−
289+ for i, line := range strings.Split(content, "\n") {
289− var result []string
290+ if i > 0 {
290− for i, line := range lines {
291+ b.WriteByte('\n')
292+ }
291 line = strings.TrimSuffix(line, "\r")
293 line = strings.TrimSuffix(line, "\r")
292
294
293− lineNum := i + startLine
295+ numStr := strconv.Itoa(i + startLine)
294− numStr := fmt.Sprintf("%d", lineNum)
296+ // Right-align to a width of 6 (numbers with >=6 digits are unpadded).
295−
297+ for pad := 6 - len(numStr); pad > 0; pad-- {
296− if len(numStr) >= 6 {
298+ b.WriteByte(' ')
297− result = append(result, fmt.Sprintf("%s|%s", numStr, line))
298− } else {
299− paddedNum := fmt.Sprintf("%6s", numStr)
300− result = append(result, fmt.Sprintf("%s|%s", paddedNum, line))
301 }
299 }
300+ b.WriteString(numStr)
301+ b.WriteByte('|')
302+ b.WriteString(line)
302 }
303 }
303
304
304− return strings.Join(result, "\n")
305+ return b.String()
305}
306}
306
307
307func readTextFile(filePath string, offset, limit, maxContentSize int) (string, bool, error) {
308func readTextFile(filePath string, offset, limit, maxContentSize int) (string, bool, error) {
@@ -335,7 +336,9 @@ func readTextFile(filePath string, offset, limit, maxContentSize int) (string, b
335 lineText = strings.TrimSuffix(lineText, "\n")
336 lineText = strings.TrimSuffix(lineText, "\n")
336 lineText = strings.TrimSuffix(lineText, "\r")
337 lineText = strings.TrimSuffix(lineText, "\r")
337 if len(lineText) > MaxLineLength {
338 if len(lineText) > MaxLineLength {
338− lineText = lineText[:MaxLineLength] + "..."
339+ // Truncate at a rune boundary to avoid splitting
340+ // multi-byte characters.
341+ lineText = strings.ToValidUTF8(lineText[:MaxLineLength], "") + "..."
339 }
342 }
340 projectedSize := contentSize + len(lineText)
343 projectedSize := contentSize + len(lineText)
341 if len(lines) > 0 {
344 if len(lines) > 0 {
@@ -445,12 +448,12 @@ func readBuiltinFile(params ViewParams, skillTracker *skills.Tracker) (fantasy.T
445
448
446 data, err := fs.ReadFile(builtinFS, embeddedPath)
449 data, err := fs.ReadFile(builtinFS, embeddedPath)
447 if err != nil {
450 if err != nil {
448− return fantasy.NewTextErrorResponse(fmt.Sprintf("Builtin file not found: %s", params.FilePath)), nil
451+ return fantasy.NewTextErrorResponse(fmt.Sprintf("builtin file not found: %s", params.FilePath)), nil
449 }
452 }
450
453
451 content := string(data)
454 content := string(data)
452 if !utf8.ValidString(content) {
455 if !utf8.ValidString(content) {
453− return fantasy.NewTextErrorResponse("File content is not valid UTF-8"), nil
456+ return fantasy.NewTextErrorResponse("file content is not valid UTF-8"), nil
454 }
457 }
455
458
456 limit := params.Limit
459 limit := params.Limit
@@ -459,7 +462,7 @@ func readBuiltinFile(params ViewParams, skillTracker *skills.Tracker) (fantasy.T
459 }
462 }
460
463
461 lines := strings.Split(content, "\n")
464 lines := strings.Split(content, "\n")
462− offset := min(params.Offset, len(lines))
465+ offset := max(0, min(params.Offset, len(lines)))
463 lines = lines[offset:]
466 lines = lines[offset:]
464
467
465 hasMore := len(lines) > limit
468 hasMore := len(lines) > limit
internal/agent/tools/view_test.go+2−2
@@ -151,7 +151,7 @@ func TestViewToolBlocksOversizedReturnedSections(t *testing.T) {
151 })
151 })
152
152
153 require.True(t, resp.IsError)
153 require.True(t, resp.IsError)
154− require.Contains(t, resp.Content, "Content section is too large")
154+ require.Contains(t, resp.Content, "content section is too large")
155}
155}
156
156
157func TestViewToolBlocksOversizedImages(t *testing.T) {
157func TestViewToolBlocksOversizedImages(t *testing.T) {
@@ -169,7 +169,7 @@ func TestViewToolBlocksOversizedImages(t *testing.T) {
169 })
169 })
170
170
171 require.True(t, resp.IsError)
171 require.True(t, resp.IsError)
172− require.Contains(t, resp.Content, "Image file is too large")
172+ require.Contains(t, resp.Content, "image file is too large")
173}
173}
174
174
175func TestReadTextFileEnforcesMaxContentSize(t *testing.T) {
175func TestReadTextFileEnforcesMaxContentSize(t *testing.T) {
internal/agent/tools/web_fetch.go+4−4
@@ -45,7 +45,7 @@ func NewWebFetchTool(workingDir string, client *http.Client) fantasy.AgentTool {
45
45
46 content, err := FetchURLAndConvert(ctx, client, params.URL)
46 content, err := FetchURLAndConvert(ctx, client, params.URL)
47 if err != nil {
47 if err != nil {
48− return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to fetch URL: %s", err)), nil
48+ return fantasy.NewTextErrorResponse(fmt.Sprintf("failed to fetch URL: %s", err)), nil
49 }
49 }
50
50
51 hasLargeContent := len(content) > LargeContentThreshold
51 hasLargeContent := len(content) > LargeContentThreshold
@@ -54,16 +54,16 @@ func NewWebFetchTool(workingDir string, client *http.Client) fantasy.AgentTool {
54 if hasLargeContent {
54 if hasLargeContent {
55 tempFile, err := os.CreateTemp(workingDir, "page-*.md")
55 tempFile, err := os.CreateTemp(workingDir, "page-*.md")
56 if err != nil {
56 if err != nil {
57− return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to create temporary file: %s", err)), nil
57+ return fantasy.NewTextErrorResponse(fmt.Sprintf("failed to create temporary file: %s", err)), nil
58 }
58 }
59 tempFilePath := tempFile.Name()
59 tempFilePath := tempFile.Name()
60
60
61 if _, err := tempFile.WriteString(content); err != nil {
61 if _, err := tempFile.WriteString(content); err != nil {
62 _ = tempFile.Close() // Best effort close
62 _ = tempFile.Close() // Best effort close
63− return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to write content to file: %s", err)), nil
63+ return fantasy.NewTextErrorResponse(fmt.Sprintf("failed to write content to file: %s", err)), nil
64 }
64 }
65 if err := tempFile.Close(); err != nil {
65 if err := tempFile.Close(); err != nil {
66− return fantasy.NewTextErrorResponse(fmt.Sprintf("Failed to close temporary file: %s", err)), nil
66+ return fantasy.NewTextErrorResponse(fmt.Sprintf("failed to close temporary file: %s", err)), nil
67 }
67 }
68
68
69 fmt.Fprintf(&result, "Fetched content from %s (large page)\n\n", params.URL)
69 fmt.Fprintf(&result, "Fetched content from %s (large page)\n\n", params.URL)
internal/agent/tools/web_search.go+1−1
@@ -53,7 +53,7 @@ func NewWebSearchTool(client *http.Client) fantasy.AgentTool {
53 results, err := searchDuckDuckGo(ctx, client, params.Query, maxResults)
53 results, err := searchDuckDuckGo(ctx, client, params.Query, maxResults)
54 slog.Debug("Web search completed", "query", params.Query, "results", len(results), "err", err)
54 slog.Debug("Web search completed", "query", params.Query, "results", len(results), "err", err)
55 if err != nil {
55 if err != nil {
56− return fantasy.NewTextErrorResponse("Failed to search: " + err.Error()), nil
56+ return fantasy.NewTextErrorResponse("failed to search: " + err.Error()), nil
57 }
57 }
58
58
59 return fantasy.NewTextResponse(formatSearchResults(results)), nil
59 return fantasy.NewTextResponse(formatSearchResults(results)), nil
internal/agent/tools/write.go+15−14
@@ -66,21 +66,25 @@ func NewWriteTool(
66 filePath := filepathext.SmartJoin(workingDir, params.FilePath)
66 filePath := filepathext.SmartJoin(workingDir, params.FilePath)
67
67
68 fileInfo, err := os.Stat(filePath)
68 fileInfo, err := os.Stat(filePath)
69+ oldContent := ""
69 if err == nil {
70 if err == nil {
70 if fileInfo.IsDir() {
71 if fileInfo.IsDir() {
71− return fantasy.NewTextErrorResponse(fmt.Sprintf("Path is a directory, not a file: %s", filePath)), nil
72+ return fantasy.NewTextErrorResponse(fmt.Sprintf("path is a directory, not a file: %s", filePath)), nil
72 }
73 }
73
74
74 modTime := fileInfo.ModTime().Truncate(time.Second)
75 modTime := fileInfo.ModTime().Truncate(time.Second)
75 lastRead := filetracker.LastReadTime(ctx, sessionID, filePath)
76 lastRead := filetracker.LastReadTime(ctx, sessionID, filePath)
76 if modTime.After(lastRead) {
77 if modTime.After(lastRead) {
77− return fantasy.NewTextErrorResponse(fmt.Sprintf("File %s has been modified since it was last read.\nLast modification: %s\nLast read: %s\n\nPlease read the file again before modifying it.",
78+ return fantasy.NewTextErrorResponse(fmt.Sprintf("file %s has been modified since it was last read.\nLast modification: %s\nLast read: %s\n\nPlease read the file again before modifying it.",
78 filePath, modTime.Format(time.RFC3339), lastRead.Format(time.RFC3339))), nil
79 filePath, modTime.Format(time.RFC3339), lastRead.Format(time.RFC3339))), nil
79 }
80 }
80
81
81− oldContent, readErr := os.ReadFile(filePath)
82+ oldBytes, readErr := os.ReadFile(filePath)
82− if readErr == nil && string(oldContent) == params.Content {
83+ if readErr == nil {
83− return fantasy.NewTextErrorResponse(fmt.Sprintf("File %s already contains the exact content. No changes made.", filePath)), nil
84+ oldContent = string(oldBytes)
85+ if oldContent == params.Content {
86+ return fantasy.NewTextErrorResponse(fmt.Sprintf("file %s already contains the exact content. No changes made.", filePath)), nil
87+ }
84 }
88 }
85 } else if !os.IsNotExist(err) {
89 } else if !os.IsNotExist(err) {
86 return fantasy.ToolResponse{}, fmt.Errorf("error checking file: %w", err)
90 return fantasy.ToolResponse{}, fmt.Errorf("error checking file: %w", err)
@@ -91,20 +95,17 @@ func NewWriteTool(
91 return fantasy.ToolResponse{}, fmt.Errorf("error creating directory: %w", err)
95 return fantasy.ToolResponse{}, fmt.Errorf("error creating directory: %w", err)
92 }
96 }
93
97
94− oldContent := ""
95− if fileInfo != nil && !fileInfo.IsDir() {
96− oldBytes, readErr := os.ReadFile(filePath)
97− if readErr == nil {
98− oldContent = string(oldBytes)
99− }
100− }
101−
102 diff, additions, removals := diff.GenerateDiff(
98 diff, additions, removals := diff.GenerateDiff(
103 oldContent,
99 oldContent,
104 params.Content,
100 params.Content,
105 strings.TrimPrefix(filePath, workingDir),
101 strings.TrimPrefix(filePath, workingDir),
106 )
102 )
107
103
104+ description := fmt.Sprintf("Create file %s", filePath)
105+ if fileInfo != nil && !fileInfo.IsDir() {
106+ description = fmt.Sprintf("Overwrite file %s", filePath)
107+ }
108+
108 p, err := permissions.Request(
109 p, err := permissions.Request(
109 ctx,
110 ctx,
110 permission.CreatePermissionRequest{
111 permission.CreatePermissionRequest{
@@ -113,7 +114,7 @@ func NewWriteTool(
113 ToolCallID: call.ID,
114 ToolCallID: call.ID,
114 ToolName: WriteToolName,
115 ToolName: WriteToolName,
115 Action: "write",
116 Action: "write",
116− Description: fmt.Sprintf("Create file %s", filePath),
117+ Description: description,
117 Params: WritePermissionsParams{
118 Params: WritePermissionsParams{
118 FilePath: filePath,
119 FilePath: filePath,
119 OldContent: oldContent,
120 OldContent: oldContent,
internal/agent/usage_fallback.go−9
@@ -33,15 +33,6 @@ func fallbackStepUsage(messages []fantasy.Message, step fantasy.StepResult) (fan
33 }, true
33 }, true
34}
34}
35
35
36−func cloneFantasyMessages(messages []fantasy.Message) []fantasy.Message {
37− cloned := make([]fantasy.Message, len(messages))
38− for i, msg := range messages {
39− cloned[i] = msg
40− cloned[i].Content = append([]fantasy.MessagePart(nil), msg.Content...)
41− }
42− return cloned
43−}
44−
45func estimateMessageTokens(messages []fantasy.Message) int64 {
36func estimateMessageTokens(messages []fantasy.Message) int64 {
46 var tokens int64
37 var tokens int64
47 for _, msg := range messages {
38 for _, msg := range messages {
internal/app/app.go+97−11
@@ -21,11 +21,13 @@ import (
21 "github.com/charmbracelet/crush/internal/agent"
21 "github.com/charmbracelet/crush/internal/agent"
22 "github.com/charmbracelet/crush/internal/agent/notify"
22 "github.com/charmbracelet/crush/internal/agent/notify"
23 "github.com/charmbracelet/crush/internal/agent/tools/mcp"
23 "github.com/charmbracelet/crush/internal/agent/tools/mcp"
24+ "github.com/charmbracelet/crush/internal/clipboard"
24 "github.com/charmbracelet/crush/internal/config"
25 "github.com/charmbracelet/crush/internal/config"
25 "github.com/charmbracelet/crush/internal/db"
26 "github.com/charmbracelet/crush/internal/db"
26 "github.com/charmbracelet/crush/internal/event"
27 "github.com/charmbracelet/crush/internal/event"
27 "github.com/charmbracelet/crush/internal/filetracker"
28 "github.com/charmbracelet/crush/internal/filetracker"
28 "github.com/charmbracelet/crush/internal/format"
29 "github.com/charmbracelet/crush/internal/format"
30+ "github.com/charmbracelet/crush/internal/herdr"
29 "github.com/charmbracelet/crush/internal/history"
31 "github.com/charmbracelet/crush/internal/history"
30 "github.com/charmbracelet/crush/internal/log"
32 "github.com/charmbracelet/crush/internal/log"
31 "github.com/charmbracelet/crush/internal/lsp"
33 "github.com/charmbracelet/crush/internal/lsp"
@@ -72,8 +74,13 @@ type App struct {
72 tuiWG *sync.WaitGroup
74 tuiWG *sync.WaitGroup
73
75
74 // global context and cleanup functions
76 // global context and cleanup functions
75− globalCtx context.Context
77+ globalCtx context.Context
76− cleanupFuncs []func(context.Context) error
78+ cleanupFuncs []func(context.Context) error
79+ // bgCancel cancels the context passed to the fire-and-forget
80+ // goroutines launched from New (update check, MCP init, LSP tracking);
81+ // bgWG tracks them so Shutdown can join them before closing the DB.
82+ bgCancel context.CancelFunc
83+ bgWG sync.WaitGroup
77 agentNotifications *pubsub.Broker[notify.Notification]
84 agentNotifications *pubsub.Broker[notify.Notification]
78 // runCompletions is the authoritative per-run completion signal,
85 // runCompletions is the authoritative per-run completion signal,
79 // emitted once per top-level agent turn after all message
86 // emitted once per top-level agent turn after all message
@@ -82,6 +89,10 @@ type App struct {
82 // drive their exit on a deterministic, payload-bearing event
89 // drive their exit on a deterministic, payload-bearing event
83 // instead of guessing from message finish parts.
90 // instead of guessing from message finish parts.
84 runCompletions *pubsub.Broker[notify.RunComplete]
91 runCompletions *pubsub.Broker[notify.RunComplete]
92+
93+ // herdrClient reports agent state to herdr when running inside
94+ // a herdr-managed pane. Nil when not in a herdr environment.
95+ herdrClient *herdr.Client
85}
96}
86
97
87// New initializes a new application instance. skillsMgr carries the
98// New initializes a new application instance. skillsMgr carries the
@@ -122,10 +133,31 @@ func New(ctx context.Context, conn *sql.DB, store *config.ConfigStore, skillsMgr
122
133
123 app.setupEvents()
134 app.setupEvents()
124
135
136+ // Initialize clipboard support. This is best-effort; if it fails
137+ // (e.g., headless environment), clipboard operations will return nil.
138+ if err := clipboard.Init(); err != nil {
139+ slog.Warn("Clipboard initialization failed", "error", err)
140+ }
141+
142+ // Background goroutines run on a cancelable context so Shutdown can
143+ // stop and join them (see goBackground / Shutdown) rather than leaking
144+ // them past teardown.
145+ bgCtx, bgCancel := context.WithCancel(ctx)
146+ app.bgCancel = bgCancel
147+
125 // Check for updates in the background.
148 // Check for updates in the background.
126− go app.checkForUpdates(ctx)
149+ app.goBackground(func() { app.checkForUpdates(bgCtx) })
150+
151+ app.goBackground(func() { mcp.Initialize(bgCtx, app.Permissions, store) })
127
152
128− go mcp.Initialize(ctx, app.Permissions, store)
153+ // Start herdr integration when running inside a herdr pane.
154+ app.herdrClient = herdr.Init()
155+ herdr.BridgeLocal(ctx, app.herdrClient, herdr.BridgeSources{
156+ PermRequests: app.Permissions,
157+ PermNotifications: app.Permissions,
158+ RunCompletions: app.runCompletions,
159+ Messages: app.Messages,
160+ })
129
161
130 // Release the shared database connection on shutdown. The pool
162 // Release the shared database connection on shutdown. The pool
131 // closes the underlying *sql.DB when the last reference is released.
163 // closes the underlying *sql.DB when the last reference is released.
@@ -154,11 +186,22 @@ func New(ctx context.Context, conn *sql.DB, store *config.ConfigStore, skillsMgr
154 client.SetDiagnosticsCallback(updateLSPDiagnostics)
186 client.SetDiagnosticsCallback(updateLSPDiagnostics)
155 updateLSPState(name, client.GetServerState(), nil, client, 0)
187 updateLSPState(name, client.GetServerState(), nil, client, 0)
156 })
188 })
157− go app.LSPManager.TrackConfigured()
189+ app.goBackground(app.LSPManager.TrackConfigured)
158
190
159 return app, nil
191 return app, nil
160}
192}
161
193
194+// goBackground runs fn in a goroutine tracked by bgWG so Shutdown can join
195+// it. Callers whose work is cancelable should close over the app's
196+// background context (see New) so bgCancel actually interrupts them.
197+func (app *App) goBackground(fn func()) {
198+ app.bgWG.Add(1)
199+ go func() {
200+ defer app.bgWG.Done()
201+ fn()
202+ }()
203+}
204+
162// Config returns the pure-data configuration.
205// Config returns the pure-data configuration.
163func (app *App) Config() *config.Config {
206func (app *App) Config() *config.Config {
164 return app.config.Config()
207 return app.config.Config()
@@ -185,6 +228,23 @@ func (app *App) AgentNotifications() *pubsub.Broker[notify.Notification] {
185 return app.agentNotifications
228 return app.agentNotifications
186}
229}
187
230
231+// RunCompletions returns the broker for the authoritative per-run
232+// terminal RunComplete events. The dispatcher (backend.runAgent) uses
233+// it to emit a reliable terminal event when a run fails before the
234+// coordinator could publish one of its own.
235+func (app *App) RunCompletions() *pubsub.Broker[notify.RunComplete] {
236+ return app.runCompletions
237+}
238+
239+// ReportCurrentSession tells herdr which session the user is now
240+// viewing so it can persist a resumable reference for the pane. Safe
241+// to call when not running inside a herdr pane; the underlying client
242+// is nil-safe. Call this whenever the active session changes (load,
243+// new, or select).
244+func (app *App) ReportCurrentSession(sessionID string) {
245+ app.herdrClient.SetSessionID(sessionID)
246+}
247+
188// resolveSession resolves which session to use for a non-interactive run
248// resolveSession resolves which session to use for a non-interactive run
189// If continueSessionID is set, it looks up that session by ID
249// If continueSessionID is set, it looks up that session by ID
190// If useLast is set, it returns the most recently updated top-level session
250// If useLast is set, it returns the most recently updated top-level session
@@ -282,7 +342,9 @@ func (app *App) RunNonInteractive(ctx context.Context, output io.Writer, prompt,
282 }
342 }
283
343
284 // force update of agent models before running so mcp tools are loaded
344 // force update of agent models before running so mcp tools are loaded
285− app.AgentCoordinator.UpdateModels(ctx)
345+ if err := app.AgentCoordinator.UpdateModels(ctx); err != nil {
346+ slog.Warn("failed to update agent models", "error", err)
347+ }
286
348
287 defer stopSpinner()
349 defer stopSpinner()
288
350
@@ -301,6 +363,9 @@ func (app *App) RunNonInteractive(ctx context.Context, output io.Writer, prompt,
301 // session.
363 // session.
302 app.Permissions.AutoApproveSession(sess.ID)
364 app.Permissions.AutoApproveSession(sess.ID)
303
365
366+ // Report session identity to herdr.
367+ app.ReportCurrentSession(sess.ID)
368+
304 type response struct {
369 type response struct {
305 result *fantasy.AgentResult
370 result *fantasy.AgentResult
306 err error
371 err error
@@ -418,10 +483,10 @@ func (app *App) overrideModelsForNonInteractive(ctx context.Context, largeModel,
418 }
483 }
419 largeProviderID = found.provider
484 largeProviderID = found.provider
420 slog.Info("Overriding large model for non-interactive run", "provider", found.provider, "model", found.modelID)
485 slog.Info("Overriding large model for non-interactive run", "provider", found.provider, "model", found.modelID)
421− app.config.Config().Models[config.SelectedModelTypeLarge] = config.SelectedModel{
486+ app.config.OverridePreferredModel(config.SelectedModelTypeLarge, config.SelectedModel{
422 Provider: found.provider,
487 Provider: found.provider,
423 Model: found.modelID,
488 Model: found.modelID,
424− }
489+ })
425 }
490 }
426
491
427 // Override small model.
492 // Override small model.
@@ -432,15 +497,15 @@ func (app *App) overrideModelsForNonInteractive(ctx context.Context, largeModel,
432 return err
497 return err
433 }
498 }
434 slog.Info("Overriding small model for non-interactive run", "provider", found.provider, "model", found.modelID)
499 slog.Info("Overriding small model for non-interactive run", "provider", found.provider, "model", found.modelID)
435− app.config.Config().Models[config.SelectedModelTypeSmall] = config.SelectedModel{
500+ app.config.OverridePreferredModel(config.SelectedModelTypeSmall, config.SelectedModel{
436 Provider: found.provider,
501 Provider: found.provider,
437 Model: found.modelID,
502 Model: found.modelID,
438− }
503+ })
439
504
440 case largeModel != "":
505 case largeModel != "":
441 // No small model specified, but large model was - use provider's default.
506 // No small model specified, but large model was - use provider's default.
442 smallCfg := app.GetDefaultSmallModel(largeProviderID)
507 smallCfg := app.GetDefaultSmallModel(largeProviderID)
443− app.config.Config().Models[config.SelectedModelTypeSmall] = smallCfg
508+ app.config.OverridePreferredModel(config.SelectedModelTypeSmall, smallCfg)
444 }
509 }
445
510
446 return app.AgentCoordinator.UpdateModels(ctx)
511 return app.AgentCoordinator.UpdateModels(ctx)
@@ -649,6 +714,24 @@ func (app *App) Shutdown() {
649 }
714 }
650 }
715 }
651
716
717+ // Cancel and join the fire-and-forget goroutines from New before the
718+ // DB/MCP cleanup below, so none keep touching a closing store, DB, or
719+ // MCP registry. Bounded by shutdownCtx so a goroutine that ignores
720+ // cancellation can't hang shutdown.
721+ if app.bgCancel != nil {
722+ app.bgCancel()
723+ }
724+ bgJoined := make(chan struct{})
725+ go func() {
726+ app.bgWG.Wait()
727+ close(bgJoined)
728+ }()
729+ select {
730+ case <-bgJoined:
731+ case <-shutdownCtx.Done():
732+ slog.Warn("Timed out waiting for background goroutines on shutdown")
733+ }
734+
652 // Now run remaining cleanup tasks in parallel.
735 // Now run remaining cleanup tasks in parallel.
653 var wg sync.WaitGroup
736 var wg sync.WaitGroup
654
737
@@ -662,6 +745,9 @@ func (app *App) Shutdown() {
662 shell.GetBackgroundShellManager().KillAll(shutdownCtx)
745 shell.GetBackgroundShellManager().KillAll(shutdownCtx)
663 })
746 })
664
747
748+ // Close herdr client to stop its background writer.
749+ app.herdrClient.Close()
750+
665 // Shutdown all LSP clients.
751 // Shutdown all LSP clients.
666 wg.Go(func() {
752 wg.Go(func() {
667 app.LSPManager.KillAll(shutdownCtx)
753 app.LSPManager.KillAll(shutdownCtx)
internal/backend/accepted_run_integration_test.gonew file+131
@@ -0,0 +1,131 @@
1+package backend
2+
3+import (
4+ "context"
5+ "testing"
6+ "time"
7+
8+ "charm.land/fantasy"
9+ "github.com/charmbracelet/crush/internal/agent"
10+ "github.com/charmbracelet/crush/internal/agent/agenttest"
11+ "github.com/charmbracelet/crush/internal/db"
12+ "github.com/charmbracelet/crush/internal/message"
13+ "github.com/charmbracelet/crush/internal/proto"
14+ "github.com/charmbracelet/crush/internal/session"
15+ "github.com/stretchr/testify/require"
16+)
17+
18+// gatedCoordinator wraps a real agent.Coordinator and parks RunAccepted
19+// before delegating to it. Every method other than RunAccepted is
20+// inherited from the embedded coordinator, so BeginAccepted (called by
21+// Backend.SendMessage) and RunAccepted (called by the dispatched run)
22+// are the production agent.Coordinator implementations under test, not
23+// stubs. The gate only delays entry into the real RunAccepted so a
24+// cancel can be made to land in the accepted-but-not-yet-active window
25+// deterministically: the accept handle is not consumed by
26+// sessionAgent.Run until the real RunAccepted runs after the gate opens.
27+type gatedCoordinator struct {
28+ agent.Coordinator
29+ entered chan struct{}
30+ gate chan struct{}
31+}
32+
33+func (c *gatedCoordinator) RunAccepted(ctx context.Context, accept *agent.AcceptedRun, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
34+ close(c.entered)
35+ <-c.gate
36+ return c.Coordinator.RunAccepted(ctx, accept, sessionID, prompt, attachments...)
37+}
38+
39+// newRealCoordinator builds a production agent.Coordinator over a
40+// DB-backed session/message store, wrapped in a gate. It is constructed
41+// through the real agent.NewCoordinator path (via the test-only
42+// agenttest helper) with an offline-resolvable model: the
43+// cancel-on-entry path under test persists a canceled turn and returns
44+// before any model call, so no network I/O happens.
45+func newRealCoordinator(t *testing.T) (*gatedCoordinator, session.Service, message.Service) {
46+ t.Helper()
47+ conn, err := db.Connect(t.Context(), t.TempDir())
48+ require.NoError(t, err)
49+ t.Cleanup(func() { conn.Close() })
50+
51+ q := db.New(conn)
52+ sessions := session.NewService(q, conn)
53+ messages := message.NewService(q)
54+
55+ coord, err := agenttest.NewCoordinator(t.Context(), t.TempDir(), sessions, messages)
56+ require.NoError(t, err)
57+
58+ return &gatedCoordinator{
59+ Coordinator: coord,
60+ entered: make(chan struct{}),
61+ gate: make(chan struct{}),
62+ }, sessions, messages
63+}
64+
65+// TestSendMessage_AcceptedCancelRace_RealMachinery exercises the
66+// 202/cancel race end-to-end through Backend.SendMessage against the
67+// production agent.Coordinator (BeginAccepted + RunAccepted), not a
68+// stub. It asserts that a cancel arriving after the prompt is accepted
69+// but before the run becomes active is not lost: the accepted handle
70+// reaches sessionAgent.Run and drives cancel-on-entry, which persists a
71+// canceled turn instead of streaming.
72+//
73+// This test would fail if Coordinator.BeginAccepted returned nil (Cancel
74+// would find no accepted run and record no mark, and the run would
75+// receive a nil Accepted handle and skip cancel-on-entry) or if
76+// Coordinator.RunAccepted dropped the handle on its way into
77+// sessionAgent.Run (the run would likewise skip cancel-on-entry and try
78+// to stream the model). In either case no FinishReasonCanceled turn
79+// would be persisted.
80+func TestSendMessage_AcceptedCancelRace_RealMachinery(t *testing.T) {
81+ t.Parallel()
82+ b, _ := newTestBackend(t)
83+
84+ coord, sessions, messages := newRealCoordinator(t)
85+ sess, err := sessions.Create(t.Context(), "session")
86+ require.NoError(t, err)
87+
88+ ws := insertAgentWorkspace(t, b, coord)
89+
90+ require.NoError(t, b.SendMessage(ws.ID, proto.AgentMessage{SessionID: sess.ID, Prompt: "hi"}))
91+
92+ // Coordinator.BeginAccepted ran synchronously inside SendMessage
93+ // before dispatch; the dispatched run has now entered the gate but
94+ // has not yet called the real RunAccepted, so the accept handle is
95+ // not yet consumed: the prompt is accepted but not active.
96+ select {
97+ case <-coord.entered:
98+ case <-time.After(2 * time.Second):
99+ t.Fatal("dispatched run never entered RunAccepted")
100+ }
101+
102+ // A cancel arriving now lands in the accepted-but-not-yet-active
103+ // window and is only recorded because BeginAccepted incremented the
104+ // accept counter.
105+ require.NoError(t, b.CancelSession(ws.ID, sess.ID))
106+
107+ // Release the gate so the real RunAccepted threads the handle into
108+ // sessionAgent.Run, which drives cancel-on-entry.
109+ close(coord.gate)
110+
111+ // The dispatched run returns nil (cancel-on-entry), so runWG drains.
112+ waited := make(chan struct{})
113+ go func() {
114+ ws.runWG.Wait()
115+ close(waited)
116+ }()
117+ select {
118+ case <-waited:
119+ case <-time.After(5 * time.Second):
120+ t.Fatal("runWG.Wait did not complete after the canceled run returned")
121+ }
122+
123+ // The accepted-but-not-yet-active cancel persisted a canceled turn
124+ // rather than streaming a real response.
125+ msgs, err := messages.List(t.Context(), sess.ID)
126+ require.NoError(t, err)
127+ require.Len(t, msgs, 2)
128+ require.Equal(t, message.User, msgs[0].Role)
129+ require.Equal(t, message.Assistant, msgs[1].Role)
130+ require.Equal(t, message.FinishReasonCanceled, msgs[1].FinishReason())
131+}
internal/backend/agent.go+129−11
@@ -2,22 +2,32 @@ package backend
2
2
3import (
3import (
4 "context"
4 "context"
5+ "errors"
6+ "os"
5
7
6 "github.com/charmbracelet/crush/internal/agent"
8 "github.com/charmbracelet/crush/internal/agent"
9+ "github.com/charmbracelet/crush/internal/agent/notify"
7 "github.com/charmbracelet/crush/internal/config"
10 "github.com/charmbracelet/crush/internal/config"
8 "github.com/charmbracelet/crush/internal/proto"
11 "github.com/charmbracelet/crush/internal/proto"
12+ "github.com/charmbracelet/crush/internal/pubsub"
13+ "github.com/charmbracelet/crush/internal/shell"
9)
14)
10
15
11−// SendMessage sends a prompt to the agent coordinator for the given
16+// SendMessage validates and accepts a prompt for the workspace's agent,
12−// workspace and session.
17+// then dispatches the run on a goroutine bound to the workspace context
18+// and returns immediately. It does not wait for the LLM turn to
19+// complete: the run's lifetime is owned by the workspace, not by the
20+// caller. Errors from the dispatched run reach observers through the
21+// agent event channels (a notify.TypeAgentError notification), not
22+// through this return value.
13//
23//
14−// When msg.RunID is non-empty it is attached to the context via
24+// SendMessage returns synchronously when the request cannot be accepted:
15−// agent.WithRunID so the coordinator can stamp the resulting
25+// ErrWorkspaceNotFound if the workspace is missing, ErrAgentNotInitialized
16−// SessionAgentCall (and therefore the terminal notify.RunComplete
26+// if its coordinator is nil, the structural validation errors from
17−// event) with that correlator. This is the only way for the
27+// agent.ValidateCall (ErrEmptyPrompt, ErrSessionMissing) when the prompt
18−// originating client to distinguish its own turn's RunComplete from
28+// or session is missing, and ErrWorkspaceClosing if the workspace is
19−// any concurrent turn that finishes on the same session.
29+// being torn down.
20−func (b *Backend) SendMessage(ctx context.Context, workspaceID string, msg proto.AgentMessage) error {
30+func (b *Backend) SendMessage(workspaceID string, msg proto.AgentMessage) error {
21 ws, err := b.GetWorkspace(workspaceID)
31 ws, err := b.GetWorkspace(workspaceID)
22 if err != nil {
32 if err != nil {
23 return err
33 return err
@@ -27,11 +37,88 @@ func (b *Backend) SendMessage(ctx context.Context, workspaceID string, msg proto
27 return ErrAgentNotInitialized
37 return ErrAgentNotInitialized
28 }
38 }
29
39
40+ if err := agent.ValidateCall(agent.SessionAgentCall{
41+ SessionID: msg.SessionID,
42+ Prompt: msg.Prompt,
43+ Attachments: proto.AttachmentsToMessage(msg.Attachments),
44+ }); err != nil {
45+ return err
46+ }
47+
48+ accept := ws.AgentCoordinator.BeginAccepted(msg.SessionID)
49+
50+ ws.runMu.Lock()
51+ if ws.closing {
52+ ws.runMu.Unlock()
53+ accept.Close()
54+ return ErrWorkspaceClosing
55+ }
56+ ws.runWG.Add(1)
57+ ws.runMu.Unlock()
58+
59+ go b.runAgent(ws, msg, accept)
60+ return nil
61+}
62+
63+// runAgent executes an accepted agent run for the workspace. It owns the
64+// accept reservation (releasing it on return) and the runWG ticket added
65+// by SendMessage. The run is bound to the workspace context so its
66+// lifetime is independent of any client's HTTP request.
67+//
68+// On a non-cancel error it surfaces the failure to observers via a
69+// notify.TypeAgentError notification (lossy, best-effort). That alone is
70+// not a reliable terminal signal: the agent-event fan-in uses lossy
71+// subscribers, so a `crush run` caller blocking on its RunID could hang
72+// if the event is dropped. To guarantee termination, when msg.RunID is
73+// non-empty and the coordinator did not already publish the run's
74+// authoritative terminal RunComplete (e.g. the error was returned before
75+// sessionAgent.Run executed, such as a readyWg or UpdateModels failure),
76+// runAgent emits an errored RunComplete on the must-deliver
77+// runCompletions broker so the waiter observes a deterministic terminal
78+// event. context.Canceled is expected (sessionAgent.Run already
79+// publishes the cancelled terminal marker) and produces no error
80+// terminal event.
81+//
82+// When msg.RunID is non-empty it is attached to the context via
83+// agent.WithRunID so the coordinator can stamp the terminal
84+// notify.RunComplete event with that correlator. A run-complete marker
85+// is also attached so the coordinator can report whether it published
86+// the terminal event, letting runAgent avoid a duplicate fallback.
87+func (b *Backend) runAgent(ws *Workspace, msg proto.AgentMessage, accept *agent.AcceptedRun) {
88+ defer ws.runWG.Done()
89+ defer accept.Close()
90+
91+ ctx := ws.ctx
30 if msg.RunID != "" {
92 if msg.RunID != "" {
31 ctx = agent.WithRunID(ctx, msg.RunID)
93 ctx = agent.WithRunID(ctx, msg.RunID)
32 }
94 }
33− _, err = ws.AgentCoordinator.Run(ctx, msg.SessionID, msg.Prompt, proto.AttachmentsToMessage(msg.Attachments)...)
95+ ctx = agent.WithRunCompleteMarker(ctx)
34− return err
96+
97+ _, err := ws.AgentCoordinator.RunAccepted(ctx, accept, msg.SessionID, msg.Prompt, proto.AttachmentsToMessage(msg.Attachments)...)
98+ if err == nil || errors.Is(err, context.Canceled) {
99+ return
100+ }
101+
102+ ws.AgentNotifications().Publish(pubsub.CreatedEvent, notify.Notification{
103+ SessionID: msg.SessionID,
104+ RunID: msg.RunID,
105+ Type: notify.TypeAgentError,
106+ Message: err.Error(),
107+ })
108+
109+ // Reliable terminal fallback. Only needed when a RunID waiter
110+ // exists and the coordinator has not already emitted the run's
111+ // terminal RunComplete; otherwise this would be a duplicate.
112+ if msg.RunID == "" || agent.RunCompletePublished(ctx) {
113+ return
114+ }
115+ if rc := ws.RunCompletions(); rc != nil {
116+ rc.PublishMustDeliver(ctx, pubsub.UpdatedEvent, notify.RunComplete{
117+ SessionID: msg.SessionID,
118+ RunID: msg.RunID,
119+ Error: err.Error(),
120+ })
121+ }
35}
122}
36
123
37// GetAgentInfo returns the agent's model and busy status.
124// GetAgentInfo returns the agent's model and busy status.
@@ -153,3 +240,34 @@ func (b *Backend) GetDefaultSmallModel(workspaceID, providerID string) (config.S
153
240
154 return ws.GetDefaultSmallModel(providerID), nil
241 return ws.GetDefaultSmallModel(providerID), nil
155}
242}
243+
244+// RunShellCommand runs a shell command in the workspace directory and
245+// persists the command + output as a user message in the session.
246+func (b *Backend) RunShellCommand(ctx context.Context, workspaceID string, req proto.ShellCommandRequest) (proto.ShellCommandResponse, error) {
247+ ws, err := b.GetWorkspace(workspaceID)
248+ if err != nil {
249+ return proto.ShellCommandResponse{}, err
250+ }
251+
252+ var persist shell.PersistFunc
253+ if req.SessionID != "" {
254+ persist = func(cmd, output string, exitCode int) error {
255+ return shell.PersistOutput(ctx, ws.Messages, req.SessionID, cmd, output, exitCode)
256+ }
257+ }
258+
259+ result, err := shell.RunAndPersist(ctx, shell.RunOptions{
260+ Command: req.Command,
261+ Cwd: ws.Path,
262+ Env: append(os.Environ(), ws.Env...),
263+ TermWidth: req.TermWidth,
264+ }, persist)
265+ if err != nil {
266+ return proto.ShellCommandResponse{}, err
267+ }
268+
269+ return proto.ShellCommandResponse{
270+ Output: result.Output,
271+ ExitCode: result.ExitCode,
272+ }, nil
273+}
internal/backend/agent_runcomplete_test.gonew file+163
@@ -0,0 +1,163 @@
1+package backend
2+
3+import (
4+ "context"
5+ "errors"
6+ "testing"
7+ "time"
8+
9+ "charm.land/fantasy"
10+ "github.com/charmbracelet/crush/internal/agent"
11+ "github.com/charmbracelet/crush/internal/app"
12+ "github.com/charmbracelet/crush/internal/message"
13+ "github.com/charmbracelet/crush/internal/proto"
14+ "github.com/google/uuid"
15+ "github.com/stretchr/testify/require"
16+)
17+
18+// errorCoordinator is a minimal agent.Coordinator whose RunAccepted
19+// returns a configurable error. When markPublished is true it stamps
20+// the run-complete marker on the context before returning, simulating a
21+// real coordinator that already published the run's authoritative
22+// terminal RunComplete (so runAgent must not emit a duplicate fallback).
23+type errorCoordinator struct {
24+ err error
25+ markPublished bool
26+}
27+
28+func (c *errorCoordinator) Run(ctx context.Context, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
29+ return nil, c.err
30+}
31+
32+func (c *errorCoordinator) RunAccepted(ctx context.Context, accept *agent.AcceptedRun, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
33+ if c.markPublished {
34+ agent.MarkRunCompletePublished(ctx)
35+ }
36+ return nil, c.err
37+}
38+
39+func (c *errorCoordinator) BeginAccepted(sessionID string) *agent.AcceptedRun { return nil }
40+func (c *errorCoordinator) Cancel(string) {}
41+func (c *errorCoordinator) CancelAll() {}
42+func (c *errorCoordinator) IsBusy() bool { return false }
43+func (c *errorCoordinator) IsSessionBusy(string) bool { return false }
44+func (c *errorCoordinator) QueuedPrompts(string) int { return 0 }
45+func (c *errorCoordinator) QueuedPromptsList(string) []string { return nil }
46+func (c *errorCoordinator) ClearQueue(string) {}
47+func (c *errorCoordinator) Summarize(context.Context, string) error { return nil }
48+func (c *errorCoordinator) Model() agent.Model { return agent.Model{} }
49+func (c *errorCoordinator) UpdateModels(context.Context) error { return nil }
50+func (c *errorCoordinator) GenerateTitle(context.Context, string, string) {}
51+
52+// insertRunCompleteWorkspace installs a workspace backed by a real
53+// app.App (so the runCompletions broker exists) with the given
54+// coordinator and a workspace run context derived from base.
55+func insertRunCompleteWorkspace(t *testing.T, b *Backend, base context.Context, coord agent.Coordinator) *Workspace {
56+ t.Helper()
57+ a := app.NewForTest(base)
58+ a.AgentCoordinator = coord
59+ t.Cleanup(a.ShutdownForTest)
60+ ws := &Workspace{
61+ ID: uuid.New().String(),
62+ Path: t.TempDir(),
63+ resolvedPath: t.TempDir(),
64+ clients: make(map[string]*clientState),
65+ shutdownFn: func() {},
66+ }
67+ ws.App = a
68+ ws.ctx, ws.cancel = context.WithCancel(base)
69+ b.mu.Lock()
70+ b.workspaces.Set(ws.ID, ws)
71+ b.pathIndex[ws.resolvedPath] = ws.ID
72+ b.mu.Unlock()
73+ return ws
74+}
75+
76+// TestRunAgent_PreRunErrorPublishesTerminalRunComplete proves that an
77+// error returned from RunAccepted before the coordinator could publish
78+// its own terminal event (e.g. a readyWg or UpdateModels failure,
79+// modeled here by a stub coordinator) still yields a reliable terminal
80+// RunComplete for the run's RunID. Without it, a `crush run` caller
81+// blocking on that RunID would hang because the lossy TypeAgentError
82+// event is not a guaranteed terminal signal.
83+func TestRunAgent_PreRunErrorPublishesTerminalRunComplete(t *testing.T) {
84+ t.Parallel()
85+ b, _ := newTestBackend(t)
86+ runErr := errors.New("update models failed")
87+ ws := insertRunCompleteWorkspace(t, b, context.Background(), &errorCoordinator{err: runErr})
88+
89+ subCtx, cancel := context.WithCancel(context.Background())
90+ defer cancel()
91+ ch := ws.RunCompletions().Subscribe(subCtx)
92+
93+ err := b.SendMessage(ws.ID, proto.AgentMessage{SessionID: "S1", RunID: "run-1", Prompt: "hi"})
94+ require.NoError(t, err)
95+
96+ select {
97+ case ev := <-ch:
98+ require.Equal(t, "run-1", ev.Payload.RunID,
99+ "the terminal RunComplete must carry the dispatched RunID")
100+ require.Equal(t, "S1", ev.Payload.SessionID)
101+ require.Equal(t, runErr.Error(), ev.Payload.Error,
102+ "the fallback terminal event must be marked errored")
103+ require.False(t, ev.Payload.Cancelled)
104+ case <-time.After(2 * time.Second):
105+ t.Fatal("no terminal RunComplete published for a pre-run error; a run waiter would hang")
106+ }
107+}
108+
109+// TestRunAgent_NoFallbackWhenCoordinatorPublished ensures the fallback
110+// is suppressed when the coordinator already emitted the run's
111+// authoritative terminal RunComplete, so callers never observe a
112+// duplicate terminal event for the same RunID.
113+func TestRunAgent_NoFallbackWhenCoordinatorPublished(t *testing.T) {
114+ t.Parallel()
115+ b, _ := newTestBackend(t)
116+ runErr := errors.New("stream failed after publishing terminal event")
117+ ws := insertRunCompleteWorkspace(t, b, context.Background(),
118+ &errorCoordinator{err: runErr, markPublished: true})
119+
120+ subCtx, cancel := context.WithCancel(context.Background())
121+ defer cancel()
122+ ch := ws.RunCompletions().Subscribe(subCtx)
123+
124+ err := b.SendMessage(ws.ID, proto.AgentMessage{SessionID: "S1", RunID: "run-1", Prompt: "hi"})
125+ require.NoError(t, err)
126+
127+ // Wait for the dispatched run goroutine to return so any publish
128+ // has already happened.
129+ ws.runWG.Wait()
130+
131+ select {
132+ case ev := <-ch:
133+ t.Fatalf("runAgent published a duplicate terminal RunComplete: %+v", ev.Payload)
134+ case <-time.After(200 * time.Millisecond):
135+ }
136+}
137+
138+// TestRunAgent_CancellationPublishesNoErrorTerminal verifies that a
139+// context.Canceled result from RunAccepted produces no errored terminal
140+// RunComplete from runAgent: cancellation is sessionAgent.Run's
141+// responsibility (it publishes the cancelled marker) and the dispatcher
142+// must not synthesize an error terminal for it.
143+func TestRunAgent_CancellationPublishesNoErrorTerminal(t *testing.T) {
144+ t.Parallel()
145+ b, _ := newTestBackend(t)
146+ ws := insertRunCompleteWorkspace(t, b, context.Background(),
147+ &errorCoordinator{err: context.Canceled})
148+
149+ subCtx, cancel := context.WithCancel(context.Background())
150+ defer cancel()
151+ ch := ws.RunCompletions().Subscribe(subCtx)
152+
153+ err := b.SendMessage(ws.ID, proto.AgentMessage{SessionID: "S1", RunID: "run-1", Prompt: "hi"})
154+ require.NoError(t, err)
155+
156+ ws.runWG.Wait()
157+
158+ select {
159+ case ev := <-ch:
160+ t.Fatalf("cancellation must not publish a terminal RunComplete: %+v", ev.Payload)
161+ case <-time.After(200 * time.Millisecond):
162+ }
163+}
internal/backend/agent_test.gonew file+164
@@ -0,0 +1,164 @@
1+package backend
2+
3+import (
4+ "context"
5+ "sync/atomic"
6+ "testing"
7+ "time"
8+
9+ "charm.land/fantasy"
10+ "github.com/charmbracelet/crush/internal/agent"
11+ "github.com/charmbracelet/crush/internal/app"
12+ "github.com/charmbracelet/crush/internal/message"
13+ "github.com/charmbracelet/crush/internal/proto"
14+ "github.com/google/uuid"
15+ "github.com/stretchr/testify/require"
16+)
17+
18+// blockingCoordinator is a minimal agent.Coordinator whose RunAccepted
19+// blocks until release is closed. It records that RunAccepted was
20+// entered so tests can observe the dispatched goroutine. Every other
21+// method returns a zero value.
22+type blockingCoordinator struct {
23+ entered chan struct{}
24+ release chan struct{}
25+ runCount atomic.Int32
26+}
27+
28+func newBlockingCoordinator() *blockingCoordinator {
29+ return &blockingCoordinator{
30+ entered: make(chan struct{}, 1),
31+ release: make(chan struct{}),
32+ }
33+}
34+
35+func (c *blockingCoordinator) Run(ctx context.Context, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
36+ return nil, nil
37+}
38+
39+func (c *blockingCoordinator) RunAccepted(ctx context.Context, accept *agent.AcceptedRun, sessionID, prompt string, attachments ...message.Attachment) (*fantasy.AgentResult, error) {
40+ c.runCount.Add(1)
41+ select {
42+ case c.entered <- struct{}{}:
43+ default:
44+ }
45+ <-c.release
46+ return nil, nil
47+}
48+
49+func (c *blockingCoordinator) BeginAccepted(sessionID string) *agent.AcceptedRun { return nil }
50+func (c *blockingCoordinator) Cancel(string) {}
51+func (c *blockingCoordinator) CancelAll() {}
52+func (c *blockingCoordinator) IsBusy() bool { return false }
53+func (c *blockingCoordinator) IsSessionBusy(string) bool { return false }
54+func (c *blockingCoordinator) QueuedPrompts(string) int { return 0 }
55+func (c *blockingCoordinator) QueuedPromptsList(string) []string { return nil }
56+func (c *blockingCoordinator) ClearQueue(string) {}
57+func (c *blockingCoordinator) Summarize(context.Context, string) error { return nil }
58+func (c *blockingCoordinator) Model() agent.Model { return agent.Model{} }
59+func (c *blockingCoordinator) UpdateModels(context.Context) error { return nil }
60+func (c *blockingCoordinator) GenerateTitle(context.Context, string, string) {}
61+
62+// insertAgentWorkspace installs a synthetic workspace with the given
63+// coordinator (or none) and a workspace run context, mirroring the
64+// fields CreateWorkspace initializes.
65+func insertAgentWorkspace(t *testing.T, b *Backend, coord agent.Coordinator) *Workspace {
66+ t.Helper()
67+ ws := &Workspace{
68+ ID: uuid.New().String(),
69+ Path: t.TempDir(),
70+ resolvedPath: t.TempDir(),
71+ clients: make(map[string]*clientState),
72+ shutdownFn: func() {},
73+ }
74+ ws.App = &app.App{AgentCoordinator: coord}
75+ ws.ctx, ws.cancel = context.WithCancel(b.ctx)
76+ b.mu.Lock()
77+ b.workspaces.Set(ws.ID, ws)
78+ b.pathIndex[ws.resolvedPath] = ws.ID
79+ b.mu.Unlock()
80+ return ws
81+}
82+
83+func TestSendMessage_WorkspaceNotFound(t *testing.T) {
84+ t.Parallel()
85+ b, _ := newTestBackend(t)
86+ err := b.SendMessage("nope", proto.AgentMessage{SessionID: "S1", Prompt: "hi"})
87+ require.ErrorIs(t, err, ErrWorkspaceNotFound)
88+}
89+
90+func TestSendMessage_AgentNotInitialized(t *testing.T) {
91+ t.Parallel()
92+ b, _ := newTestBackend(t)
93+ ws := insertAgentWorkspace(t, b, nil)
94+ err := b.SendMessage(ws.ID, proto.AgentMessage{SessionID: "S1", Prompt: "hi"})
95+ require.ErrorIs(t, err, ErrAgentNotInitialized)
96+}
97+
98+func TestSendMessage_EmptyPrompt(t *testing.T) {
99+ t.Parallel()
100+ b, _ := newTestBackend(t)
101+ ws := insertAgentWorkspace(t, b, newBlockingCoordinator())
102+ err := b.SendMessage(ws.ID, proto.AgentMessage{SessionID: "S1", Prompt: ""})
103+ require.ErrorIs(t, err, agent.ErrEmptyPrompt)
104+}
105+
106+func TestSendMessage_SessionMissing(t *testing.T) {
107+ t.Parallel()
108+ b, _ := newTestBackend(t)
109+ ws := insertAgentWorkspace(t, b, newBlockingCoordinator())
110+ err := b.SendMessage(ws.ID, proto.AgentMessage{SessionID: "", Prompt: "hi"})
111+ require.ErrorIs(t, err, agent.ErrSessionMissing)
112+}
113+
114+func TestSendMessage_WorkspaceClosing(t *testing.T) {
115+ t.Parallel()
116+ b, _ := newTestBackend(t)
117+ ws := insertAgentWorkspace(t, b, newBlockingCoordinator())
118+ ws.runMu.Lock()
119+ ws.closing = true
120+ ws.runMu.Unlock()
121+ err := b.SendMessage(ws.ID, proto.AgentMessage{SessionID: "S1", Prompt: "hi"})
122+ require.ErrorIs(t, err, ErrWorkspaceClosing)
123+}
124+
125+// TestSendMessage_SuccessIncrementsRunWG asserts the happy path returns
126+// nil synchronously and dispatches a tracked goroutine: while
127+// RunAccepted blocks, runWG.Wait must not complete (the ticket is
128+// outstanding); after release it drains.
129+func TestSendMessage_SuccessIncrementsRunWG(t *testing.T) {
130+ t.Parallel()
131+ b, _ := newTestBackend(t)
132+ coord := newBlockingCoordinator()
133+ ws := insertAgentWorkspace(t, b, coord)
134+
135+ err := b.SendMessage(ws.ID, proto.AgentMessage{SessionID: "S1", Prompt: "hi"})
136+ require.NoError(t, err)
137+
138+ select {
139+ case <-coord.entered:
140+ case <-time.After(2 * time.Second):
141+ t.Fatal("dispatched goroutine never entered RunAccepted")
142+ }
143+ require.Equal(t, int32(1), coord.runCount.Load())
144+
145+ waited := make(chan struct{})
146+ go func() {
147+ ws.runWG.Wait()
148+ close(waited)
149+ }()
150+
151+ select {
152+ case <-waited:
153+ t.Fatal("runWG.Wait completed while the run was still in flight; ticket was not added")
154+ case <-time.After(100 * time.Millisecond):
155+ }
156+
157+ close(coord.release)
158+
159+ select {
160+ case <-waited:
161+ case <-time.After(2 * time.Second):
162+ t.Fatal("runWG.Wait did not complete after the run returned")
163+ }
164+}
internal/backend/backend.go+74−1
@@ -34,6 +34,7 @@ var (
34 ErrUnknownCommand = errors.New("unknown command")
34 ErrUnknownCommand = errors.New("unknown command")
35 ErrInvalidClientID = errors.New("invalid client_id")
35 ErrInvalidClientID = errors.New("invalid client_id")
36 ErrClientNotAttached = errors.New("client not attached")
36 ErrClientNotAttached = errors.New("client not attached")
37+ ErrWorkspaceClosing = errors.New("workspace closing")
37)
38)
38
39
39// DefaultCreateGrace is the window in which a client must open an SSE
40// DefaultCreateGrace is the window in which a client must open an SSE
@@ -108,6 +109,23 @@ type Workspace struct {
108 // with fallback to the cleaned absolute path.
109 // with fallback to the cleaned absolute path.
109 resolvedPath string
110 resolvedPath string
110
111
112+ // ctx is the workspace-scoped run context. It is derived from
113+ // the backend context in CreateWorkspace and lives for the
114+ // lifetime of the workspace; cancel tears it down. Agent runs
115+ // dispatched on behalf of this workspace are bound to ctx so
116+ // their lifetime is owned by the workspace, not by any single
117+ // client's HTTP request.
118+ ctx context.Context
119+ cancel context.CancelFunc
120+
121+ // runMu guards closing and gates dispatch of new agent runs.
122+ // closing is set by Shutdown so no new runs are accepted once
123+ // teardown has begun. runWG tracks dispatched agent goroutines
124+ // so Shutdown can wait for them to return before app cleanup.
125+ runMu sync.Mutex
126+ closing bool
127+ runWG sync.WaitGroup
128+
111 // clientsMu guards clients. It is held only briefly (no IO).
129 // clientsMu guards clients. It is held only briefly (no IO).
112 clientsMu sync.Mutex
130 clientsMu sync.Mutex
113 // clients tracks each client's claim on this workspace. Refcount
131 // clients tracks each client's claim on this workspace. Refcount
@@ -122,7 +140,7 @@ type Workspace struct {
122}
140}
123
141
124// invokeShutdown calls the workspace shutdown hook if set, falling
142// invokeShutdown calls the workspace shutdown hook if set, falling
125−// back to the embedded [app.App.Shutdown] when not.
143+// back to the workspace [Workspace.Shutdown] wrapper when not.
126func (w *Workspace) invokeShutdown() {
144func (w *Workspace) invokeShutdown() {
127 if w.shutdownFn != nil {
145 if w.shutdownFn != nil {
128 w.shutdownFn()
146 w.shutdownFn()
@@ -133,6 +151,40 @@ func (w *Workspace) invokeShutdown() {
133 }
151 }
134}
152}
135
153
154+// Shutdown tears the workspace down in an order that is safe for
155+// agent runs whose lifetime is bound to the workspace context. It
156+// shadows the promoted [app.App.Shutdown] so callers reaching
157+// ws.Shutdown() always observe this ordering:
158+//
159+// 1. Mark the workspace closing so no new agent runs are accepted.
160+// 2. Cancel the workspace run context so any dispatched goroutine
161+// that has not yet registered its per-session cancel still
162+// observes cancellation.
163+// 3. Cancel active coordinator work for runs that already
164+// registered their per-session cancel function.
165+// 4. Wait for dispatched agent goroutines to return.
166+// 5. Run the embedded [app.App.Shutdown] cleanup (DB, LSP, etc).
167+//
168+// CancelAll is idempotent, so the second call inside app.App.Shutdown
169+// is harmless; the important guarantee is that cancel -> CancelAll ->
170+// runWG.Wait completes before the embedded cleanup touches the DB.
171+func (w *Workspace) Shutdown() {
172+ w.runMu.Lock()
173+ w.closing = true
174+ w.runMu.Unlock()
175+
176+ if w.cancel != nil {
177+ w.cancel()
178+ }
179+ if w.App != nil && w.AgentCoordinator != nil {
180+ w.AgentCoordinator.CancelAll()
181+ }
182+ w.runWG.Wait()
183+ if w.App != nil {
184+ w.App.Shutdown()
185+ }
186+}
187+
136// New creates a new [Backend].
188// New creates a new [Backend].
137func New(ctx context.Context, cfg *config.ConfigStore, shutdownFn ShutdownFunc) *Backend {
189func New(ctx context.Context, cfg *config.ConfigStore, shutdownFn ShutdownFunc) *Backend {
138 return &Backend{
190 return &Backend{
@@ -247,6 +299,7 @@ func (b *Backend) CreateWorkspace(args proto.Workspace) (*Workspace, proto.Works
247 return nil, proto.Workspace{}, fmt.Errorf("failed to create app workspace: %w", err)
299 return nil, proto.Workspace{}, fmt.Errorf("failed to create app workspace: %w", err)
248 }
300 }
249
301
302+ wsCtx, wsCancel := context.WithCancel(b.ctx)
250 ws := &Workspace{
303 ws := &Workspace{
251 App: appWorkspace,
304 App: appWorkspace,
252 ID: id,
305 ID: id,
@@ -255,6 +308,8 @@ func (b *Backend) CreateWorkspace(args proto.Workspace) (*Workspace, proto.Works
255 Env: args.Env,
308 Env: args.Env,
256 Skills: skillsMgr,
309 Skills: skillsMgr,
257 resolvedPath: key,
310 resolvedPath: key,
311+ ctx: wsCtx,
312+ cancel: wsCancel,
258 clients: make(map[string]*clientState),
313 clients: make(map[string]*clientState),
259 }
314 }
260
315
@@ -594,6 +649,24 @@ func (w *Workspace) AttachedClientsForSession(sessionID string) int {
594 return n
649 return n
595}
650}
596
651
652+// AttachedClientCountsBySession returns, for every session with at least
653+// one attached client, the number of clients currently viewing it. Only
654+// clients with a live SSE stream (streams > 0) are counted; hold-only
655+// clients (streams == 0) do not contribute. It acquires [clientsMu] once
656+// and iterates the client set a single time, so callers that need counts
657+// for many sessions avoid an O(sessions x clients) scan.
658+func (w *Workspace) AttachedClientCountsBySession() map[string]int {
659+ w.clientsMu.Lock()
660+ defer w.clientsMu.Unlock()
661+ counts := make(map[string]int)
662+ for _, cs := range w.clients {
663+ if cs.streams > 0 {
664+ counts[cs.currentSessionID]++
665+ }
666+ }
667+ return counts
668+}
669+
597// GetWorkspaceProto returns the proto representation of a workspace.
670// GetWorkspaceProto returns the proto representation of a workspace.
598func (b *Backend) GetWorkspaceProto(id string) (proto.Workspace, error) {
671func (b *Backend) GetWorkspaceProto(id string) (proto.Workspace, error) {
599 ws, err := b.GetWorkspace(id)
672 ws, err := b.GetWorkspace(id)
internal/backend/config.go+8−7
@@ -196,11 +196,12 @@ func (b *Backend) ListSkills(workspaceID string) ([]proto.SkillInfo, error) {
196 result := make([]proto.SkillInfo, len(entries))
196 result := make([]proto.SkillInfo, len(entries))
197 for i, entry := range entries {
197 for i, entry := range entries {
198 result[i] = proto.SkillInfo{
198 result[i] = proto.SkillInfo{
199− ID: entry.ID,
199+ ID: entry.ID,
200− Name: entry.Name,
200+ Name: entry.Name,
201− Description: entry.Description,
201+ Description: entry.Description,
202− Label: entry.Label,
202+ Label: entry.Label,
203− Source: string(entry.Source),
203+ Source: string(entry.Source),
204+ UserInvocable: entry.UserInvocable,
204 }
205 }
205 }
206 }
206 return result, nil
207 return result, nil
@@ -221,13 +222,13 @@ func (b *Backend) EnableDockerMCP(ctx context.Context, workspaceID string) error
221
222
222 if err := mcptools.InitializeSingle(ctx, config.DockerMCPName, ws.Cfg); err != nil {
223 if err := mcptools.InitializeSingle(ctx, config.DockerMCPName, ws.Cfg); err != nil {
223 disableErr := mcptools.DisableSingle(ws.Cfg, config.DockerMCPName)
224 disableErr := mcptools.DisableSingle(ws.Cfg, config.DockerMCPName)
224− delete(ws.Cfg.Config().MCP, config.DockerMCPName)
225+ ws.Cfg.RemoveDockerMCPInMemory()
225 return fmt.Errorf("failed to start docker MCP: %w", errors.Join(err, disableErr))
226 return fmt.Errorf("failed to start docker MCP: %w", errors.Join(err, disableErr))
226 }
227 }
227
228
228 if err := ws.Cfg.PersistDockerMCPConfig(mcpConfig); err != nil {
229 if err := ws.Cfg.PersistDockerMCPConfig(mcpConfig); err != nil {
229 disableErr := mcptools.DisableSingle(ws.Cfg, config.DockerMCPName)
230 disableErr := mcptools.DisableSingle(ws.Cfg, config.DockerMCPName)
230− delete(ws.Cfg.Config().MCP, config.DockerMCPName)
231+ ws.Cfg.RemoveDockerMCPInMemory()
231 return fmt.Errorf("docker MCP started but failed to persist configuration: %w", errors.Join(err, disableErr))
232 return fmt.Errorf("docker MCP started but failed to persist configuration: %w", errors.Join(err, disableErr))
232 }
233 }
233
234
internal/backend/config_test.go+7−9
@@ -81,15 +81,13 @@ func TestRemoveConfigField_PublishesConfigChanged(t *testing.T) {
81
81
82func TestUpdatePreferredModel_PublishesConfigChanged(t *testing.T) {
82func TestUpdatePreferredModel_PublishesConfigChanged(t *testing.T) {
83 if raceEnabled {
83 if raceEnabled {
84− // UpdatePreferredModel writes config.Models concurrently
84+ // The backend package has pre-existing, flaky data races under
85− // with the agent coordinator's async sub-agent builder
85+ // -race in its agent-run/attach/hold lifecycle that surface only
86− // that reads it via buildAgentModels. That race is
86+ // under full-package timing pressure. This test spins up the full
87− // pre-existing in the codebase and unrelated to this
87+ // coordinator, so it is skipped under -race to keep CI stable
88− // item; ConfigStore mutations are not currently
88+ // until that concurrency debt is addressed. The mutator → publish
89− // synchronized against background readers in [app.App].
89+ // wiring is unit-tested via publishConfigChanged regardless.
90− // The mutator → publish wiring is unit-tested via
90+ t.Skip("skipped under -race: pre-existing backend lifecycle races")
91− // publishConfigChanged regardless.
92− t.Skip("skipped under -race: pre-existing race between ConfigStore writes and agent coordinator startup")
93 }
91 }
94 b, ws, evc := newPublishingWorkspace(t)
92 b, ws, evc := newPublishingWorkspace(t)
95
93
internal/backend/shell_command_test.gonew file+54

This diff is too big to show here.

internal/backend/testing.go+14

This diff is too big to show here.

internal/client/proto.go+39−5

This diff is too big to show here.

internal/client/proto_test.go+70

This diff is too big to show here.

internal/clipboard/clipboard.gonew file+44

This diff is too big to show here.

internal/clipboard/clipboard_not_supported.gonew file+13

This diff is too big to show here.

internal/clipboard/clipboard_supported.gonew file+30

This diff is too big to show here.

internal/cmd/login.go+3−6

This diff is too big to show here.

internal/cmd/logs.go+3−3

This diff is too big to show here.

internal/cmd/models.go+74−29

This diff is too big to show here.

internal/cmd/root.go+33−27

This diff is too big to show here.

internal/cmd/run.go+31−4

This diff is too big to show here.

internal/cmd/run_stream_test.go+88

This diff is too big to show here.

internal/cmd/schema.go+35−1

This diff is too big to show here.

internal/cmd/session.go+1−1

This diff is too big to show here.

internal/commands/commands.go+15−54

This diff is too big to show here.

internal/commands/commands_test.go+61

This diff is too big to show here.

internal/config/clone_test.gonew file+46

This diff is too big to show here.

internal/config/config.go+82−3

This diff is too big to show here.

internal/config/docker_mcp.go+23−16

This diff is too big to show here.

internal/config/docker_mcp_test.go+9−7

This diff is too big to show here.

internal/config/hyper.go+1−1

This diff is too big to show here.

internal/config/load.go+237−43

This diff is too big to show here.

internal/config/load_test.go+275−58

This diff is too big to show here.

internal/config/recent_models_test.go+67−170

This diff is too big to show here.

internal/config/refresh_singleflight_test.gonew file+175

This diff is too big to show here.

internal/config/resolve.go+11

This diff is too big to show here.

internal/config/scopeb_race_test.gonew file+74

This diff is too big to show here.

internal/config/store.go+357−137

This diff is too big to show here.

internal/config/store_test.go+1−1

This diff is too big to show here.

internal/config/update_model_bench_test.gonew file+108

This diff is too big to show here.

internal/csync/maps.go+20−5

This diff is too big to show here.

internal/db/db.go+24−4

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/db/migrations/20260701000000_add_composite_indexes.sqlnew file+12

This diff is too big to show here.

internal/db/migrations/20260702000000_add_hot_path_indexes.sqlnew file+14

This diff is too big to show here.

internal/db/models.go+1−1

This diff is too big to show here.

internal/db/querier.go+5−3

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/db/sql/messages.sql+7

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/discover/discover.gonew file+145

This diff is too big to show here.

internal/discover/discover_test.gonew file+221

This diff is too big to show here.

internal/discover/enricher.gonew file+60

This diff is too big to show here.

internal/discover/litellm.gonew file+87

This diff is too big to show here.

internal/discover/litellm_test.gonew file+173

This diff is too big to show here.

internal/discover/llamacpp.gonew file+83

This diff is too big to show here.

internal/discover/llamacpp_test.gonew file+135

This diff is too big to show here.

internal/discover/lmstudio.gonew file+95

This diff is too big to show here.

internal/discover/lmstudio_test.gonew file+154

This diff is too big to show here.

internal/discover/ollama.gonew file+105

This diff is too big to show here.

internal/discover/ollama_test.gonew file+131

This diff is too big to show here.

internal/discover/omlx.gonew file+73

This diff is too big to show here.

internal/discover/omlx_test.gonew file+92

This diff is too big to show here.

internal/event/event.go+15−2

This diff is too big to show here.

internal/filepathext/filepath.go+25

This diff is too big to show here.

internal/filepathext/filepath_test.gonew file+37

This diff is too big to show here.

internal/filetracker/service.go+19−2

This diff is too big to show here.

internal/fsext/fileutil.go+47−26

This diff is too big to show here.

internal/fsext/fileutil_dirtrim_test.gonew file+32

This diff is too big to show here.

internal/fsext/lookup.go+2−7

This diff is too big to show here.

internal/fsext/owner_others.go+8−5

This diff is too big to show here.

internal/fsext/owner_windows.go+7

This diff is too big to show here.

internal/herdr/client.gonew file+405

This diff is too big to show here.

internal/herdr/client_test.gonew file+158

This diff is too big to show here.

internal/herdr/translate.gonew file+150

This diff is too big to show here.

internal/herdr/translate_test.gonew file+145

This diff is too big to show here.

internal/history/file.go+20−15

This diff is too big to show here.

internal/hooks/hooks_test.go+31

This diff is too big to show here.

internal/hooks/input.go+2

This diff is too big to show here.

internal/hooks/runner.go+1−1

This diff is too big to show here.

internal/lsp/client.go+5

This diff is too big to show here.

internal/lsp/handlers.go+6−6

This diff is too big to show here.

internal/lsp/manager.go+28−8

This diff is too big to show here.

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

This diff is too big to show here.

internal/message/content.go+110−23

This diff is too big to show here.

internal/message/message.go+115−60

This diff is too big to show here.

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

This diff is too big to show here.

internal/oauth/copilot/client_test.gonew file+70

This diff is too big to show here.

internal/permission/permission.go+55−47

This diff is too big to show here.

internal/proto/agent.go+7

This diff is too big to show here.

internal/proto/message.go+25−7

This diff is too big to show here.

internal/proto/proto.go+19−5

This diff is too big to show here.

internal/pubsub/broker.go+69−27

This diff is too big to show here.

internal/pubsub/broker_test.gonew file+117

This diff is too big to show here.

internal/server/agent_cancel_test.go+73−56

This diff is too big to show here.

internal/server/e2e_agent_test.gonew file+742

This diff is too big to show here.

internal/server/e2e_test.go+12

This diff is too big to show here.

internal/server/events.go+19−6

This diff is too big to show here.

internal/server/events_test.go+32

This diff is too big to show here.

internal/server/net_other.go+54−3

This diff is too big to show here.

internal/server/net_windows.go+16−3

This diff is too big to show here.

internal/server/proto.go+78−26

This diff is too big to show here.

internal/server/recover_test.go+4−4

This diff is too big to show here.

internal/server/server.go+37−2

This diff is too big to show here.

internal/server/sessions_isbusy_test.go+11−2

This diff is too big to show here.

internal/server/socket.gonew file+10

This diff is too big to show here.

internal/server/socket_classify.gonew file+27

This diff is too big to show here.

internal/server/socket_test.gonew file+193

This diff is too big to show here.

internal/session/session.go+17−3

This diff is too big to show here.

internal/shell/background.go+1−1

This diff is too big to show here.

internal/shell/dispatch.go+2−1

This diff is too big to show here.

internal/shell/exec_unix.gonew file+108

This diff is too big to show here.

internal/shell/exec_windows.gonew file+23

This diff is too big to show here.

internal/shell/expand.go+20−3

This diff is too big to show here.

internal/shell/isolation_unix_test.gonew file+143

This diff is too big to show here.

internal/shell/jq_test.go+18−6

This diff is too big to show here.

internal/shell/persist_message.gonew file+44

This diff is too big to show here.

internal/shell/persist_message_test.gonew file+69

This diff is too big to show here.

internal/shell/run.go+147−1

This diff is too big to show here.

internal/shell/run_test.go+43

This diff is too big to show here.

internal/shell/shell.go+5

This diff is too big to show here.

internal/shell/stream.gonew file+52

This diff is too big to show here.

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

This diff is too big to show here.

internal/skills/catalog.go+12−10

This diff is too big to show here.

internal/skills/embed.go+1−1

This diff is too big to show here.

internal/skills/skills.go+30−1

This diff is too big to show here.

internal/ui/anim/anim.go+38−11

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/agent.go+61−26

This diff is too big to show here.

internal/ui/chat/assistant.go+326−90

This diff is too big to show here.

internal/ui/chat/assistant_render_test.gonew file+78

This diff is too big to show here.

internal/ui/chat/assistant_section_cache_test.go+3−3

This diff is too big to show here.

internal/ui/chat/assistant_thinking_bench_test.gonew file+69

This diff is too big to show here.

internal/ui/chat/assistant_thinking_bound_test.gonew file+105

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/file.go+22−22

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/incremental_glamour_test.go+144−16

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/messages.go+12−1

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/shell.gonew file+358

This diff is too big to show here.

internal/ui/chat/shell_test.gonew file+59

This diff is too big to show here.

internal/ui/chat/streaming_markdown.go+232−251

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/chat/tools.go+153−65

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/common/ansi16.gonew file+128

This diff is too big to show here.

internal/ui/common/ansi16_test.gonew file+106

This diff is too big to show here.

internal/ui/common/capabilities.go−12

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/common/elements.go+3

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/common/interface.go+9

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/dialog/actions.go+3

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/dialog/commands_item.go+6−6

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/dialog/models.go+3−2

This diff is too big to show here.

internal/ui/dialog/models_list.go+52−57

This diff is too big to show here.

internal/ui/dialog/oauth.go−2

This diff is too big to show here.

internal/ui/dialog/overlay_test.gonew file+189

This diff is too big to show here.

internal/ui/dialog/permissions.go+90−28

This diff is too big to show here.

internal/ui/dialog/permissions_test.gonew file+99

This diff is too big to show here.

internal/ui/dialog/sessions.go+16−11

This diff is too big to show here.

internal/ui/dialog/sessions_item.go+15−2

This diff is too big to show here.

internal/ui/difftastic/difftastic.gonew file+60

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/diffview/diffview_test.go−18

This diff is too big to show here.

internal/ui/diffview/style.go+46−44

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/list/list.go+51−6

This diff is too big to show here.

internal/ui/model/chat.go+165−33

This diff is too big to show here.

internal/ui/model/clipboard.godeleted−15

This diff is too big to show here.

internal/ui/model/clipboard_not_supported.godeleted−7

This diff is too big to show here.

internal/ui/model/clipboard_supported.godeleted−15

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/model/filter_test.gonew file+162

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/model/keys.go+36−22

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/model/permission_test.go+4−4

This diff is too big to show here.

internal/ui/model/pills.go+54−8

This diff is too big to show here.

internal/ui/model/session.go+5−6

This diff is too big to show here.

internal/ui/model/sidebar.go+175−21

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/model/ui.go+729−138

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

internal/ui/styles/styles.go+32−5

This diff is too big to show here.

internal/ui/styles/themes.go+182−36

This diff is too big to show here.

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

This diff is too big to show here.

internal/workspace/app_workspace.go+56−5

This diff is too big to show here.

internal/workspace/client_workspace.go+43−14

This diff is too big to show here.

internal/workspace/workspace.go+2

This diff is too big to show here.

schema.json+64−2

This diff is too big to show here.

vendor/charm.land/bubbles/v2/LICENSEnew file+21

This diff is too big to show here.

vendor/charm.land/bubbles/v2/cursor/cursor.gonew file+241

This diff is too big to show here.

vendor/charm.land/bubbles/v2/filepicker/filepicker.gonew file+529

This diff is too big to show here.

vendor/charm.land/bubbles/v2/filepicker/hidden_unix.gonew file+11

This diff is too big to show here.

vendor/charm.land/bubbles/v2/filepicker/hidden_windows.gonew file+21

This diff is too big to show here.

vendor/charm.land/bubbles/v2/help/help.gonew file+253

This diff is too big to show here.

vendor/charm.land/bubbles/v2/internal/memoization/memoization.gonew file+125

This diff is too big to show here.

vendor/charm.land/bubbles/v2/internal/runeutil/runeutil.gonew file+102

This diff is too big to show here.

vendor/charm.land/bubbles/v2/key/key.gonew file+140

This diff is too big to show here.

vendor/charm.land/bubbles/v2/spinner/spinner.gonew file+211

This diff is too big to show here.

vendor/charm.land/bubbles/v2/textarea/textarea.gonew file+1897

This diff is too big to show here.

vendor/charm.land/bubbles/v2/textinput/styles.gonew file+96

This diff is too big to show here.

vendor/charm.land/bubbles/v2/textinput/textinput.gonew file+968

This diff is too big to show here.

vendor/charm.land/bubbles/v2/viewport/highlight.gonew file+141

This diff is too big to show here.

vendor/charm.land/bubbles/v2/viewport/keymap.gonew file+58

This diff is too big to show here.

vendor/charm.land/bubbles/v2/viewport/viewport.gonew file+765

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/.gitattributesnew file+1

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/.gitignorenew file+23

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/.golangci.ymlnew file+47

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/.goreleaser.ymlnew file+5

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/LICENSEnew file+21

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/README.mdnew file+402

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/Taskfile.yamlnew file+38

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/UPGRADE_GUIDE_V2.mdnew file+573

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/clipboard.gonew file+70

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/color.gonew file+91

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/commands.gonew file+175

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/cursed_renderer.gonew file+860

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/cursor.gonew file+28

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/environ.gonew file+34

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/exec.gonew file+129

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/focus.gonew file+9

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/input.gonew file+54

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/key.gonew file+371

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/keyboard.gonew file+59

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/logging.gonew file+53

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/mod.gonew file+27

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/mouse.gonew file+144

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/nil_renderer.gonew file+53

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/options.gonew file+168

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/paste.gonew file+20

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/profile.gonew file+15

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/raw.gonew file+37

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/renderer.gonew file+104

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/screen.gonew file+68

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/signals_unix.gonew file+33

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/signals_windows.gonew file+10

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/tea.gonew file+1439

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termcap.gonew file+48

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termios_bsd.gonew file+13

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termios_other.gonew file+8

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termios_unix.gonew file+14

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/termios_windows.gonew file+11

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/tty.gonew file+136

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/tty_unix.gonew file+47

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/tty_windows.gonew file+64

This diff is too big to show here.

vendor/charm.land/bubbletea/v2/xterm.gonew file+22

This diff is too big to show here.

vendor/charm.land/catwalk/LICENSEnew file+21

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/aihubmix.jsonnew file+3746

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/alibaba-singapore.jsonnew file+141

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/alibaba-united-states.jsonnew file+45

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/anthropic.jsonnew file+183

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/avian.jsonnew file+125

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/azure.jsonnew file+225

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/baseten.jsonnew file+187

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/bedrock-europe.jsonnew file+115

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/bedrock-united-states.jsonnew file+143

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/cerebras.jsonnew file+42

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/chutes.jsonnew file+227

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/copilot.jsonnew file+310

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/cortecs.jsonnew file+1697

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/deepseek.jsonnew file+45

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/fireworks.jsonnew file+171

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/gemini.jsonnew file+91

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/groq.jsonnew file+36

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/huggingface.jsonnew file+267

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/ionet.jsonnew file+335

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/kimi.jsonnew file+23

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/minimax-china.jsonnew file+91

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/minimax.jsonnew file+91

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/moonshot.jsonnew file+131

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/nebius.jsonnew file+419

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/neuralwatt.jsonnew file+155

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/openai.jsonnew file+352

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/opencode-go.jsonnew file+351

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/opencode-zen.jsonnew file+908

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/openrouter.jsonnew file+3831

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/qiniucloud.jsonnew file+179

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/scaleway.jsonnew file+141

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/synthetic.jsonnew file+197

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/venice.jsonnew file+1173

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/vercel.jsonnew file+3072

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/vertexai.jsonnew file+170

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/xai.jsonnew file+59

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/zai.jsonnew file+136

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/zhipu-coding.jsonnew file+136

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/configs/zhipu.jsonnew file+120

This diff is too big to show here.

vendor/charm.land/catwalk/internal/providers/providers.gonew file+349

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/catwalk/client.gonew file+79

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/catwalk/pkg.gonew file+2

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/catwalk/provider.gonew file+157

This diff is too big to show here.

vendor/charm.land/catwalk/pkg/embedded/embedded.gonew file+13

This diff is too big to show here.

vendor/charm.land/fang/v2/.gitignorenew file+3

This diff is too big to show here.

vendor/charm.land/fang/v2/.golangci.ymlnew file+47

This diff is too big to show here.

vendor/charm.land/fang/v2/.goreleaser.ymlnew file+5

This diff is too big to show here.

vendor/charm.land/fang/v2/LICENSE.mdnew file+21

This diff is too big to show here.

vendor/charm.land/fang/v2/README.mdnew file+92

This diff is too big to show here.

vendor/charm.land/fang/v2/Taskfile.ymlnew file+7

This diff is too big to show here.

vendor/charm.land/fang/v2/UPGRADE_GUIDE_V2.mdnew file+127

This diff is too big to show here.

vendor/charm.land/fang/v2/fang.gonew file+208

This diff is too big to show here.

vendor/charm.land/fang/v2/fang_other.gonew file+10

This diff is too big to show here.

vendor/charm.land/fang/v2/fang_windows.gonew file+30

This diff is too big to show here.

vendor/charm.land/fang/v2/help.gonew file+482

This diff is too big to show here.

vendor/charm.land/fang/v2/theme.gonew file+222

This diff is too big to show here.

vendor/charm.land/fantasy/.editorconfignew file+18

This diff is too big to show here.

vendor/charm.land/fantasy/.gitattributesnew file+1

This diff is too big to show here.

vendor/charm.land/fantasy/.gitignorenew file+42

This diff is too big to show here.

vendor/charm.land/fantasy/.golangci.ymlnew file+44

This diff is too big to show here.

vendor/charm.land/fantasy/.goreleaser.ymlnew file+6

This diff is too big to show here.

vendor/charm.land/fantasy/AGENTS.mdnew file+29

This diff is too big to show here.

vendor/charm.land/fantasy/LICENSEnew file+177

This diff is too big to show here.

vendor/charm.land/fantasy/NOTICEnew file+13

This diff is too big to show here.

vendor/charm.land/fantasy/README.mdnew file+95

This diff is too big to show here.

vendor/charm.land/fantasy/Taskfile.yamlnew file+45

This diff is too big to show here.

vendor/charm.land/fantasy/agent.gonew file+1702

This diff is too big to show here.

vendor/charm.land/fantasy/content.gonew file+625

This diff is too big to show here.

vendor/charm.land/fantasy/content_json.gonew file+1046

This diff is too big to show here.

vendor/charm.land/fantasy/crush.jsonnew file+6

This diff is too big to show here.

vendor/charm.land/fantasy/cspell.jsonnew file+1

This diff is too big to show here.

vendor/charm.land/fantasy/doc.gonew file+2

This diff is too big to show here.

vendor/charm.land/fantasy/errors.gonew file+155

This diff is too big to show here.

vendor/charm.land/fantasy/jsonrepair/jsonrepair.gonew file+1648

This diff is too big to show here.

vendor/charm.land/fantasy/model.gonew file+261

This diff is too big to show here.

vendor/charm.land/fantasy/model_json.gonew file+156

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

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

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/metadata.go+937

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/retry.go+117

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/retry_linux.go+31

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/syscheck.go+28

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/syscheck_linux.go+30

This diff is too big to show here.

vendor/cloud.google.com/go/compute/metadata/syscheck_windows.go+39

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/.gitignore+1

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/ARCHITECTURE.md+244

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/LICENSE+61

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/README.md+86

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/constants.go+65

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/data/xml/dom/xmldocument.go+73

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotification.go+88

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanager.go+53

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotificationmanagerforuser.go+68

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/internal/winrt/ui/notifications/toastnotifier.go+64

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/powershell.go.tmpl+14

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/tmpl.go+28

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/tmpl/xml.go.tmpl+34

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/toast.go+225

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind.go+86

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_noop.go+19

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/bind_windows.go+174

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/impl.go+179

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/procs.go+37

This diff is too big to show here.

vendor/git.sr.ht/~jackmordaunt/go-toast/wintoast/registry.go+110

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/CHANGELOG.md+849

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/LICENSE.txt+21

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/README.md+39

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/ci.yml+29

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go+44

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/doc.go+53

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go+173

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/doc.go+264

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/errors.go+17

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go+57

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go+175

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go+77

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go+260

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go+201

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go+50

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go+159

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go+135

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/fake/fake.go+133

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go+123

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go+148

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go+24

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go+212

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go+44

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go+149

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/doc.go+10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go+55

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/doc.go+10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go+198

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/doc.go+10

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go+27

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go+138

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go+94

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go+75

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go+236

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go+72

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go+40

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_trace.go+154

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go+35

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_key_credential.go+64

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go+264

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go+34

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go+276

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_sas_credential.go+55

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go+83

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go+396

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go+281

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go+109

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_other.go+15

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_dialer_wasm.go+15

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go+48

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/doc.go+9

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go+89

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go+41

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go+191

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/LICENSE.txt+21

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/diag.go+51

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/diag/doc.go+7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/doc.go+7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/errorinfo/errorinfo.go+46

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/exported/exported.go+129

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/doc.go+7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/log/log.go+104

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/poller/util.go+155

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/temporal/resource.go+123

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/doc.go+7

This diff is too big to show here.

vendor/github.com/Azure/azure-sdk-for-go/sdk/internal/uuid/uuid.go+76

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/.gitignore+14

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/CONTRIBUTING.md

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/LICENSE+21

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/README.md+242

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/SECURITY.md+6

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/commonmark.go+393

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/escape/escape.go+65

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/from.go+464

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/logo_five_years.png

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/markdown.go+212

This diff is too big to show here.

vendor/github.com/JohannesKaufmann/html-to-markdown/utils.go+533

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/.gitignore+16

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/.travis.yml+9

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/LICENSE+21

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/Makefile+32

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/README.md+232

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/depth.go+129

This diff is too big to show here.

vendor/github.com/KyleBanks/depth/pkg.go+184

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/LICENSE+21

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/README.md+52

This diff is too big to show here.

vendor/github.com/MakeNowJust/heredoc/heredoc.go+105

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.gitattributes+1

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.gitignore+10

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/.golangci.yml+147

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/CODEOWNERS+1

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/LICENSE+22

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/README.md+89

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/SECURITY.md+41

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/backup.go+287

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/doc.go+22

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/ea.go+137

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/file.go+320

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/fileinfo.go+106

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/hvsock.go+582

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/doc.go+2

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/fs.go+262

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/security.go+12

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go+61

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go+20

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/socket.go+177

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go+69

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go+132

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pipe.go+586

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go+232

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go+16

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go+13

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go+27

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/privilege.go+196

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/reparse.go+131

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/sd.go+133

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/syscall.go+5

This diff is too big to show here.

vendor/github.com/Microsoft/go-winio/zsyscall_windows.go+378

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/.gitattributes+1

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/.gitignore+16

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/LICENSE+12

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/README.md+218

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/array.go+124

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/doc.go+123

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/expand.go+70

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/filter.go+163

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/iteration.go+61

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/manipulation.go+679

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/property.go+275

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/query.go+49

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/traversal.go+704

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/type.go+203

This diff is too big to show here.

vendor/github.com/PuerkitoBio/goquery/utilities.go+177

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.editorconfig+17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.gitignore+28

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.golangci.yml+122

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/.goreleaser.yml+34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/AGENTS.md+11

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/BUILD.bit+93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/COPYING+118

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/Dockerfile+64

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/Justfile+59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/README.md+309

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/biome.json+6

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/chroma.jpg

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/coalesce.go+35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/colour.go+192

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/delegate.go+161

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/doc.go+7

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/emitters.go+233

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatter.go+43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/api.go+57

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/html/html.go+692

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/json.go+39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/svg/font_liberation_mono.go+51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/svg/svg.go+222

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tokens.go+18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tty_indexed.go+284

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/formatters/tty_truecolour.go+76

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/iterator.go+93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexer.go+179

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/README.md+46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/caddyfile.go+275

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/cl.go+243

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/dns.go+17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/emacs.go+533

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abap.xml+154

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/abnf.xml+66

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript.xml+68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/actionscript_3.xml+163

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ada.xml+321

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/agda.xml+66

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/al.xml+75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/alloy.xml+58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ampl.xml+98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/angular2.xml+109

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/antlr.xml+317

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apacheconf.xml+74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/apl.xml+59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/applescript.xml+151

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arangodb_aql.xml+174

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arduino.xml+322

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/armasm.xml+126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/arturo.xml+119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/atl.xml+165

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autohotkey.xml+78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/autoit.xml+70

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/awk.xml+95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ballerina.xml+97

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash.xml+222

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bash_session.xml+25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/batchfile.xml+660

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/beef.xml+120

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bibtex.xml+152

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bicep.xml+84

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/blitzbasic.xml+141

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bnf.xml+28

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/bqn.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/brainfuck.xml+51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c#.xml+121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c++.xml+331

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c.xml+260

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/c3.xml+374

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cap_n_proto.xml+122

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cassandra_cql.xml+137

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ceylon.xml+151

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfengine3.xml+197

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cfstatement.xml+92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chaiscript.xml+134

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/chapel.xml+143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cheetah.xml+55

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/clojure.xml+71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cmake.xml+90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cobol.xml+90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coffeescript.xml+210

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/common_lisp.xml+184

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/coq.xml+136

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/core.xml+79

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/crystal.xml+762

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/css.xml+323

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/csv.xml+53

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cue.xml+85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/cython.xml+372

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/d.xml+133

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dart.xml+213

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dax.xml+39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/desktop_entry.xml+17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/devicetree.xml+251

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/diff.xml+52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/django_jinja.xml+153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dns.xml+44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/docker.xml+68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dtd.xml+168

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/dylan.xml+176

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ebnf.xml+90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elixir.xml+744

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/elm.xml+119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/emacslisp.xml+132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erb.xml+37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/erlang.xml+166

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/factor.xml+412

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fennel.xml+68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fish.xml+159

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/forth.xml+78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortran.xml+102

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fortranfixed.xml+71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/fsharp.xml+245

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gas.xml+150

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript.xml+259

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gdscript3.xml+270

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gemfile_lock.xml+81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gettext.xml+24

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gherkin.xml+263

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gleam.xml+100

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/glsl.xml+65

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/gnuplot.xml+289

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/go_template.xml+114

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/graphql.xml+92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groff.xml+90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/groovy.xml+135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/handlebars.xml+147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hare.xml+98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/haskell.xml+275

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hcl.xml+143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hexdump.xml+189

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlb.xml+131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hlsl.xml+110

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/holyc.xml+252

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/html.xml+159

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/hy.xml+104

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/idris.xml+216

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/igor.xml+47

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ini.xml+52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/io.xml+71

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/iscdhcpd.xml+96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/j.xml+157

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/janet.xml+48

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/java.xml+206

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/javascript.xml+160

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/json.xml+117

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonata.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jsonnet.xml+138

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/julia.xml+400

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/jungle.xml+98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kakoune.xml+96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kdl.xml+75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/kotlin.xml+234

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lateralus.xml+184

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lean.xml+56

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lighttpd_configuration_file.xml+42

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lilypond.xml+133

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/llvm.xml+73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lox.xml+78

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/lua.xml+158

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/luau.xml+173

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/makefile.xml+131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mako.xml+120

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mason.xml+89

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/materialize_sql_dialect.xml+155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mathematica.xml+60

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/matlab.xml+114

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mcfunction.xml+138

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/meson.xml+86

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/metal.xml+270

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/microcad.xml+139

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/minizinc.xml+82

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mlir.xml+73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modelica.xml+106

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/modula-2.xml+245

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mojo.xml+228

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/monkeyc.xml+153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonbit.xml+75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/moonscript.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/morrowindscript.xml+90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/myghty.xml+77

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/mysql.xml+121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nasm.xml+126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/natural.xml+143

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ndisasm.xml+123

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/newspeak.xml+121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nginx_configuration_file.xml+101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nim.xml+211

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nix.xml+258

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nsis.xml+59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/nu.xml+126

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objective-c.xml+510

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/objectpascal.xml+142

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ocaml.xml+153

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/octave.xml+101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/odin.xml+127

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/onesenterprise.xml+92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openedge_abl.xml+101

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/openscad.xml+96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/org_mode.xml+329

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pacmanconf.xml+37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/perl.xml+400

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/php.xml+258

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pig.xml+105

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pkgconfig.xml+73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pl_pgsql.xml+119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plaintext.xml+21

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/plutus_core.xml+105

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/pony.xml+135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postgresql_sql_dialect.xml+155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/postscript.xml+93

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/povray.xml+58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powerquery.xml+51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/powershell.xml+230

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prolog.xml+115

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promela.xml+119

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/promql.xml+123

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/properties.xml+45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/protocol_buffer.xml+124

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/prql.xml+161

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/psl.xml+213

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/puppet.xml+100

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python.xml+595

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/python_2.xml+356

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qbasic.xml+173

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/qml.xml+113

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/r.xml+128

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/racket.xml+260

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ragel.xml+149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/react.xml+236

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reasonml.xml+147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/reg.xml+68

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rego.xml+94

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rexx.xml+127

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rgbasm.xml+239

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ring.xml+74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpgle.xml+176

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rpm_spec.xml+58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ruby.xml+728

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/rust.xml+375

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sas.xml+191

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sass.xml+362

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scala.xml+274

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scdoc.xml+115

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scheme.xml+106

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scilab.xml+98

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/scss.xml+373

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sed.xml+92

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sieve.xml+61

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smali.xml+73

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smalltalk.xml+294

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/smarty.xml+79

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snbt.xml+58

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/snobol.xml+95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/solidity.xml+291

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sourcepawn.xml+59

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/spade.xml+292

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sparql.xml+160

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/sql.xml+90

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/squidconf.xml+63

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/standard_ml.xml+548

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stas.xml+85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/stylus.xml+132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/swift.xml+207

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemd.xml+63

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/systemverilog.xml+181

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tablegen.xml+69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tal.xml+43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tasm.xml+135

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcl.xml+272

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tcsh.xml+121

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/templ.xml+315

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/termcap.xml+75

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terminfo.xml+84

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/terraform.xml+149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tex.xml+113

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/thrift.xml+154

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/toml.xml+45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/tradingview.xml+81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/transact-sql.xml+137

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turing.xml+82

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/turtle.xml+170

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/twig.xml+155

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/txtpb.xml+162

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typescript.xml+302

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscript.xml+178

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscriptcssdata.xml+52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typoscripthtmldata.xml+52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/typst.xml+108

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/ucode.xml+147

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v.xml+355

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/v_shell.xml+365

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vala.xml+72

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vb_net.xml+162

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/verilog.xml+158

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhdl.xml+171

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vhs.xml+48

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/viml.xml+85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/vue.xml+295

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wat.xml+149

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/wdte.xml+43

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webgpu_shading_language.xml+142

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/webvtt.xml+283

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/whiley.xml+57

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xml.xml+96

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/xorg.xml+35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yaml.xml+132

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/yang.xml+99

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/z80_assembly.xml+74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zed.xml+51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/embedded/zig.xml+187

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/erb.go+29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/gemtext.go+37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/genshi.go+118

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/go.go+81

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/haxe.go+647

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/html.go+8

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/http.go+131

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/lexers.go+85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/markdown.go+107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/markless.go+168

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/mysql.go+33

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/php.go+37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/raku.go+1710

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/rst.go+89

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/svelte.go+70

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/typoscript.go+85

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/yaml_jinja.go+20

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/lexers/zed.go+24

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/mutators.go+201

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/pygments-lexers.txt+605

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/quick/quick.go+44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/regexp.go+533

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/registry.go+228

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/remap.go+94

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/renovate.json5+25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/serialise.go+483

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/style.go+530

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/abap.xml+11

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/algol.xml+18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/algol_nu.xml+18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/api.go+95

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/arduino.xml+18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/ashen.xml+69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark-soft.xml+107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/aura-theme-dark.xml+107

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/autumn.xml+36

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/average.xml+74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/base16-snazzy.xml+74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/borland.xml+26

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/bw.xml+23

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-frappe.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-latte.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-macchiato.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/catppuccin-mocha.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/colorful.xml+52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/compat.go+69

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/darcula.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/doom-one.xml+51

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/doom-one2.xml+64

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/dracula.xml+74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/emacs.xml+44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/evergarden.xml+33

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/friendly.xml+44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/fruity.xml+19

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/github-dark.xml+46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/github.xml+39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/gruvbox-light.xml+34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/gruvbox.xml+34

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/hr_high_contrast.xml+12

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/hrdark.xml+10

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/igor.xml+9

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-dragon.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-lotus.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/kanagawa-wave.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/lovelace.xml+53

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/manni.xml+44

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/modus-operandi.xml+13

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/modus-vivendi.xml+13

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/monokai.xml+29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/monokailight.xml+26

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/murphy.xml+52

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/native.xml+35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/nord.xml+46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/nordic.xml+46

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/onedark.xml+25

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/onesenterprise.xml+10

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/paraiso-dark.xml+37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/paraiso-light.xml+37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/pastie.xml+45

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/perldoc.xml+37

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/pygments.xml+42

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rainbow_dash.xml+40

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-dawn.xml+29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine-moon.xml+29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rose-pine.xml+29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rpgle.xml+30

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/rrt.xml+19

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark.xml+39

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-dark256.xml+41

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/solarized-light.xml+17

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/swapoff.xml+18

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tango.xml+72

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-day.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-moon.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-night.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/tokyonight-storm.xml+83

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/trac.xml+35

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vim.xml+29

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vs.xml+16

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/vulcan.xml+74

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/witchhazel.xml+31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/xcode-dark.xml+31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/styles/xcode.xml+22

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/table.py+31

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/test.jsonl+2

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/tokentype_enumer.go+588

This diff is too big to show here.

vendor/github.com/alecthomas/chroma/v2/types.go+357

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/.gitignore+2

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/LICENSE+19

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/README.md+19

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/backward_references.go+185

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/backward_references_hq.go+796

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bit_cost.go+436

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bit_reader.go+266

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/bitwriter.go+56

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter.go+144

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_command.go+434

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_distance.go+433

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/block_splitter_literal.go+433

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/brotli_bit_stream.go+1435

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster.go+30

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_command.go+164

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_distance.go+326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/cluster_literal.go+326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/command.go+254

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/compress_fragment.go+834

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/compress_fragment_two_pass.go+775

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/constants.go+77

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/context.go+2176

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/decode.go+2581

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/dictionary.go+122890

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/dictionary_hash.go+32779

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encode.go+1220

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder.go+177

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder_dict.go+22

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/encoder_fast.go+197

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/entropy_encode.go+592

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/entropy_encode_static.go+4399

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/fast_log.go+290

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/find_match_length.go+45

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/LICENSE+27

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/README.md+2

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/gzip.go+65

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/huffman_bit_writer.go+517

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/huffman_code.go+346

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/token.go+80

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/flate/writer.go+66

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h10.go+287

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h5.go+214

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/h6.go+216

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash.go+342

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_composite.go+93

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_forgetful_chain.go+252

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_longest_match_quickly.go+214

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/hash_rolling.go+168

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/histogram.go+226

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/http.go+189

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/huffman.go+653

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/literal_cost.go+182

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain1.go+212

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain2.go+248

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/bargain3.go+278

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/emitter.go+34

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/m0.go+175

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/m4.go+339

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/matchfinder.go+103

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/pathfinder.go+328

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/textencoder.go+53

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/trio.go+326

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zdfast.go+258

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zfast.go+206

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/matchfinder/zm.go+301

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/memory.go+66

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock.go+574

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_command.go+165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_distance.go+165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/metablock_literal.go+165

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/params.go+37

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/platform.go+103

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/prefix.go+30

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/prefix_dec.go+723

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/quality.go+196

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/reader.go+111

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/ringbuffer.go+134

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/state.go+294

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/static_dict.go+662

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/static_dict_lut.go+75094

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/symbol_list.go+22

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/transform.go+641

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/utf8_util.go+70

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/util.go+7

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/write_bits.go+52

This diff is too big to show here.

vendor/github.com/andybalholm/brotli/writer.go+162

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/.travis.yml+14

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/LICENSE+24

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/README.md+144

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/parser.go+889

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/pseudo_classes.go+458

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/selector.go+586

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/serialize.go+176

This diff is too big to show here.

vendor/github.com/andybalholm/cascadia/specificity.go+26

This diff is too big to show here.

vendor/github.com/atotto/clipboard/.travis.yml+22

This diff is too big to show here.

vendor/github.com/atotto/clipboard/LICENSE+27

This diff is too big to show here.

vendor/github.com/atotto/clipboard/README.md+48

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard.go+20

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_darwin.go+52

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_plan9.go+42

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_unix.go+149

This diff is too big to show here.

vendor/github.com/atotto/clipboard/clipboard_windows.go+157

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/NOTICE.txt+3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/accountid_endpoint_mode.go+18

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/checksum.go+33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/config.go+254

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/context.go+22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/credential_cache.go+235

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/credentials.go+234

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/auto.go+38

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/configuration.go+43

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/defaults.go+50

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/doc.go+2

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/defaultsmode.go+95

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/doc.go+62

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/endpoints.go+247

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/errors.go+9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/from_ptr.go+365

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/logging.go+119

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/logging_generate.go+95

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/metadata.go+213

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go+168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname.go+24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname_go115.go+24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/recursion_detection.go+94

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id.go+27

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go+57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go+398

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/CHANGELOG.md+203

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/debug.go+144

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/decode.go+218

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/encode.go+167

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/error.go+23

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/headers.go+24

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/middleware.go+71

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport.go+13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/eventstreamapi/transport_go117.go+12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header.go+175

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/header_value.go+521

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream/message.go+99

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/array.go+61

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/encoder.go+80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/map.go+78

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/middleware.go+62

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/object.go+68

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/value.go+117

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/restjson/decoder_util.go+85

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/xml/error_utils.go+48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go+20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_bucket.go+96

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_rate_limit.go+83

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/request.go+25

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/restrict_file_permissions.go+21

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive.go+156

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_ratelimit.go+158

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_token_bucket.go+83

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go+51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/doc.go+80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/errors.go+20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/jitter_backoff.go+124

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/metadata.go+52

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go+487

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retry.go+103

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retryable_error.go+228

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go+343

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/throttle_error.go+60

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retry/timeout_error.go+52

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/retryer.go+127

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/runtime.go+14

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/cache.go+115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/const.go+40

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/header_rules.go+82

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go+70

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/hmac.go+13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/host.go+75

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/scope.go+13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/time.go+36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/util.go+80

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go+420

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/presign_middleware.go+127

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/stream.go+86

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go+564

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/to_ptr.go+297

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go+355

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/content_type.go+42

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error.go+33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go+56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/timeout_read_closer.go+109

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/types.go+42

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/aws/version.go+8

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md+1097

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/auth_scheme_preference.go+19

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/config.go+237

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/defaultsmode.go+47

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/doc.go+20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/env_config.go+966

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/generate.go+4

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/errors.go+22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/ini.go+56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/parse.go+109

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/sections.go+157

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/strings.go+89

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/token.go+32

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/tokenize.go+92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/internal/ini/value.go+93

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/load_options.go+1371

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/local.go+51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/provider.go+802

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve.go+458

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve_bearer_token.go+122

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go+650

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/config/shared_config.go+1704

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md+990

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/doc.go+4

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/doc.go+58

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/provider.go+241

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/auth.go+48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/client.go+165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/endpoints.go+20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/middleware.go+164

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/provider.go+207

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/dpop.go+150

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/file.go+14

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/provider.go+184

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/logincreds/token.go+110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/doc.go+92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/provider.go+296

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/doc.go+81

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go+232

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_credentials_provider.go+165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_token_provider.go+147

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/static_provider.go+63

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/assume_role_provider.go+338

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/web_identity_provider.go+181

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md+584

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_client.go+358

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetDynamicData.go+77

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetIAMInfo.go+103

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetInstanceIdentityDocument.go+110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetMetadata.go+77

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetRegion.go+73

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetToken.go+119

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetUserData.go+61

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/auth.go+48

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/doc.go+12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/endpoints.go+20

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config/resolvers.go+114

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/request_middleware.go+313

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/token_provider.go+261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/auth.go+45

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/scheme.go+191

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_adapter.go+43

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_signer_adapter.go+35

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/credentials_adapter.go+46

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/smithy.go+2

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter.go+57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter_eventstream.go+51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md+544

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/config.go+65

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/endpoints.go+57

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/context/context.go+65

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/arn.go+94

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/doc.go+3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/generate.go+7

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/host.go+51

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partition.go+76

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.go+496

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json+267

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/endpoints.go+201

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md+519

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/endpoints.go+302

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/rand/rand.go+33

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/interfaces.go+9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/time.go+74

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sdkio/byte.go+12

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/shareddefaults/shared_config.go+47

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/strings/strings.go+11

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/LICENSE+28

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/docs.go+7

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/singleflight.go+210

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/timeconv/duration.go+13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/CHANGELOG.md+486

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/credentials.go+141

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/error.go+17

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/compare.go+30

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/crypto/ecc.go+113

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/const.go+36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/header_rules.go+82

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/headers.go+68

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/hmac.go+13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/host.go+75

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/time.go+36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/internal/v4/util.go+64

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/middleware.go+118

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/presign_middleware.go+117

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/smithy.go+92

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/internal/v4a/v4a.go+520

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/CHANGELOG.md+220

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/accept_encoding_gzip.go+176

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/doc.go+22

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/CHANGELOG.md+571

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/context.go+56

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/doc.go+3

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/internal/presigned-url/middleware.go+110

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/CHANGELOG.md+85

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_client.go+945

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_CreateOAuth2Token.go+212

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteConsoleAuthorizationConfiguration.go+168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_DeleteResourcePermissionStatement.go+196

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetConsoleAuthorizationConfiguration.go+168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_GetResourcePolicy.go+155

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_ListResourcePermissionStatements.go+261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutConsoleAuthorizationConfiguration.go+168

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/api_op_PutResourcePermissionStatement.go+216

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/auth.go+361

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/deserializers.go+2474

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/doc.go+9

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/endpoints.go+854

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/generated.json+40

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/internal/endpoints/endpoints.go+333

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/options.go+242

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/serializers.go+724

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/enums.go+46

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/errors.go+247

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/types/types.go+162

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/signin/validators.go+111

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/CHANGELOG.md+792

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_client.go+929

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_GetRoleCredentials.go+165

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccountRoles.go+263

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_ListAccounts.go+261

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/api_op_Logout.go+164

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/auth.go+379

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/deserializers.go+1171

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/doc.go+27

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/endpoints.go+570

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/generated.json+35

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/internal/endpoints/endpoints.go+628

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/options.go+238

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/serializers.go+309

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/errors.go+115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/types/types.go+63

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sso/validators.go+175

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/CHANGELOG.md+790

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_client.go+929

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateToken.go+235

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_CreateTokenWithIAM.go+282

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_RegisterClient.go+206

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/api_op_StartDeviceAuthorization.go+188

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/auth.go+373

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/deserializers.go+2244

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/doc.go+49

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/endpoints.go+570

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/generated.json+36

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/internal/endpoints/endpoints.go+628

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/options.go+238

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/serializers.go+512

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/enums.go+44

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/errors.go+430

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/types/types.go+25

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/ssooidc/validators.go+184

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/CHANGELOG.md+832

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/LICENSE.txt+202

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_client.go+1115

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRole.go+544

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithSAML.go+455

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoleWithWebIdentity.go+472

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_AssumeRoot.go+229

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_DecodeAuthorizationMessage.go+189

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetAccessKeyInfo.go+180

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetCallerIdentity.go+192

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetDelegatedAccessToken.go+169

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetFederationToken.go+393

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetSessionToken.go+239

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/api_op_GetWebIdentityToken.go+192

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/auth.go+377

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/deserializers.go+3456

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/doc.go+13

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/endpoints.go+683

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/generated.json+45

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/internal/endpoints/endpoints.go+585

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/options.go+286

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/serializers.go+1198

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/errors.go+363

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/types/types.go+144

This diff is too big to show here.

vendor/github.com/aws/aws-sdk-go-v2/service/sts/validators.go+433

This diff is too big to show here.

vendor/github.com/aws/smithy-go/.gitignore+29

This diff is too big to show here.

vendor/github.com/aws/smithy-go/.travis.yml+28

This diff is too big to show here.

vendor/github.com/aws/smithy-go/AGENTS.md+172

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CHANGELOG.md+454

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CODE_OF_CONDUCT.md+4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/CONTRIBUTING.md+90

This diff is too big to show here.

vendor/github.com/aws/smithy-go/LICENSE+175

This diff is too big to show here.

vendor/github.com/aws/smithy-go/Makefile+130

This diff is too big to show here.

vendor/github.com/aws/smithy-go/NOTICE+1

This diff is too big to show here.

vendor/github.com/aws/smithy-go/README.md+107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/auth.go+3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/docs.go+3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/middleware.go+104

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/token.go+50

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/bearer/token_cache.go+208

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/identity.go+47

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/option.go+25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/auth/scheme_id.go+20

This diff is too big to show here.

vendor/github.com/aws/smithy-go/changelog-template.json+9

This diff is too big to show here.

vendor/github.com/aws/smithy-go/context/suppress_expired.go+81

This diff is too big to show here.

vendor/github.com/aws/smithy-go/doc.go+2

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document.go+10

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/doc.go+12

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/document.go+239

This diff is too big to show here.

vendor/github.com/aws/smithy-go/document/errors.go+75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/doc.go+4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/encoding.go+40

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/encode.go+123

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/header.go+122

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/path_replace.go+108

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/query.go+107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/httpbinding/uri.go+111

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/array.go+35

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/constants.go+15

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/decoder_util.go+139

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/encoder.go+30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/escape.go+198

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/object.go+40

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/json/value.go+154

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/array.go+49

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/constants.go+10

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/doc.go+49

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/element.go+91

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/encoder.go+51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/error_utils.go+51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/escape.go+137

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/map.go+53

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/value.go+302

This diff is too big to show here.

vendor/github.com/aws/smithy-go/encoding/xml/xml_decoder.go+154

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/endpoint.go+23

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/bdd/evaluate.go+35

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/doc.go+4

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/split.go+16

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/string_slice.go+18

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/strings.go+25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/endpoints/private/rulesfn/uri.go+133

This diff is too big to show here.

vendor/github.com/aws/smithy-go/errors.go+137

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/const.go+24

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/debug.go+144

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/decode.go+218

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/deserializer.go+294

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/encode.go+167

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/error.go+23

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/header.go+175

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/header_value.go+521

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/message.go+99

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/serializer.go+228

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/signer.go+82

This diff is too big to show here.

vendor/github.com/aws/smithy-go/eventstream/types.go+26

This diff is too big to show here.

vendor/github.com/aws/smithy-go/go_module_metadata.go+6

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/LICENSE+28

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/docs.go+8

This diff is too big to show here.

vendor/github.com/aws/smithy-go/internal/sync/singleflight/singleflight.go+210

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/byte.go+12

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/doc.go+2

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/reader.go+16

This diff is too big to show here.

vendor/github.com/aws/smithy-go/io/ringbuffer.go+94

This diff is too big to show here.

vendor/github.com/aws/smithy-go/local-mod-replace.sh+39

This diff is too big to show here.

vendor/github.com/aws/smithy-go/logging/logger.go+82

This diff is too big to show here.

vendor/github.com/aws/smithy-go/metrics/metrics.go+136

This diff is too big to show here.

vendor/github.com/aws/smithy-go/metrics/nop.go+98

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/context.go+41

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/doc.go+67

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/eventstream_middleware.go+21

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/logging.go+46

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/metadata.go+65

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/middleware.go+71

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/ordered_group.go+270

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/stack.go+209

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/stack_values.go+100

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_build.go+298

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_deserialize.go+300

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_finalize.go+298

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_initialize.go+299

This diff is too big to show here.

vendor/github.com/aws/smithy-go/middleware/step_serialize.go+305

This diff is too big to show here.

vendor/github.com/aws/smithy-go/modman.toml+9

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/gzip.go+30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/middleware_capture_request_compression.go+52

This diff is too big to show here.

vendor/github.com/aws/smithy-go/private/requestcompression/request_compression.go+103

This diff is too big to show here.

vendor/github.com/aws/smithy-go/properties.go+69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/doc.go+5

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/from_ptr.go+601

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/gen_scalars.go+83

This diff is too big to show here.

vendor/github.com/aws/smithy-go/ptr/to_ptr.go+499

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/doc.go+3

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/rand.go+31

This diff is too big to show here.

vendor/github.com/aws/smithy-go/rand/uuid.go+87

This diff is too big to show here.

vendor/github.com/aws/smithy-go/schema.go+328

This diff is too big to show here.

vendor/github.com/aws/smithy-go/schema_ext.go+37

This diff is too big to show here.

vendor/github.com/aws/smithy-go/serde.go+229

This diff is too big to show here.

vendor/github.com/aws/smithy-go/sync/error.go+53

This diff is too big to show here.

vendor/github.com/aws/smithy-go/time/time.go+134

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/context.go+96

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/nop.go+32

This diff is too big to show here.

vendor/github.com/aws/smithy-go/tracing/tracing.go+95

This diff is too big to show here.

vendor/github.com/aws/smithy-go/trait.go+21

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/http.go+69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/index.go+107

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/serde.go+56

This diff is too big to show here.

vendor/github.com/aws/smithy-go/traits/traits.go+72

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/auth.go+30

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/auth_schemes.go+45

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/checksum_middleware.go+70

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/client.go+161

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/doc.go+5

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/eventstream.go+209

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/eventstream_middleware.go+69

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/headerlist.go+163

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/host.go+89

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/interceptor.go+321

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/interceptor_middleware.go+325

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/internal/io/safe.go+75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/md5_checksum.go+25

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/metrics.go+204

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_close_response_body.go+79

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_content_length.go+84

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_header_comment.go+81

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_headers.go+167

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_http_logging.go+75

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_metadata.go+51

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/middleware_min_proto.go+79

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/properties.go+80

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/protocol.go+27

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/request.go+188

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/response.go+34

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/time.go+13

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/url.go+44

This diff is too big to show here.

vendor/github.com/aws/smithy-go/transport/http/user_agent.go+37

This diff is too big to show here.

vendor/github.com/aws/smithy-go/type_registry.go+70

This diff is too big to show here.

vendor/github.com/aws/smithy-go/validation.go+140

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/LICENSE-BSD+27

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/LICENSE-MIT+21

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/Makefile+4

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/README.md+142

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/diff.go+177

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/export.go+16

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/common.go+179

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/doc.go+156

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/export.go+11

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/git.sh+33

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/labels.go+55

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/old.go+475

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/lcs/sequence.go+70

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/merge.go+81

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/ndiff.go+118

This diff is too big to show here.

vendor/github.com/aymanbagabas/go-udiff/unified.go+314

This diff is too big to show here.

vendor/github.com/aymerick/douceur/LICENSE+22

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/declaration.go+60

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/rule.go+230

This diff is too big to show here.

vendor/github.com/aymerick/douceur/css/stylesheet.go+25

This diff is too big to show here.

vendor/github.com/aymerick/douceur/parser/parser.go+409

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/LICENSE+27

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/README.md+5

This diff is too big to show here.

vendor/github.com/bahlo/generic-list-go/list.go+235

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/.codecov.yml+10

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/.gitignore+32

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/LICENSE+22

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/README.md+495

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/UPGRADING.md+63

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/doublestar.go+13

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/glob.go+497

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/globoptions.go+188

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/globwalk.go+438

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/match.go+419

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils.go+165

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils_unix.go+19

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/utils_windows.go+43

This diff is too big to show here.

vendor/github.com/bmatcuk/doublestar/v4/validate.go+80

This diff is too big to show here.

vendor/github.com/buger/jsonparser/.gitignore+12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/.travis.yml+12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/Dockerfile+12

This diff is too big to show here.

vendor/github.com/buger/jsonparser/LICENSE+21

This diff is too big to show here.

vendor/github.com/buger/jsonparser/Makefile+36

This diff is too big to show here.

vendor/github.com/buger/jsonparser/README.md+361

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes.go+47

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes_safe.go+25

This diff is too big to show here.

vendor/github.com/buger/jsonparser/bytes_unsafe.go+44

This diff is too big to show here.

vendor/github.com/buger/jsonparser/escape.go+173

This diff is too big to show here.

vendor/github.com/buger/jsonparser/fuzz.go+117

This diff is too big to show here.

vendor/github.com/buger/jsonparser/oss-fuzz-build.sh+47

This diff is too big to show here.

vendor/github.com/buger/jsonparser/parser.go+1318

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/LICENSE.txt+22

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/README.md+74

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/testall.sh+10

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash.go+243

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_amd64.s+209

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_arm64.s+183

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_asm.go+15

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_other.go+76

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_safe.go+16

This diff is too big to show here.

vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go+58

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/.gitignore+2

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/LICENSE+21

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/Makefile+101

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/README.md+193

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/adapters.go+102

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent.go+73

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent_portable.go+134

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/dirent_unix.go+146

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_portable.go+37

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_unix.go+59

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/entry_filter_windows.go+156

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk.go+697

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_darwin.go+122

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_portable.go+65

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/fastwalk_unix.go+131

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/go.LICENSE+27

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent.go+85

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_aix.go+29

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_dragonfly.go+54

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_freebsd.go+46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_js.go+27

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_linux.go+50

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_netbsd.go+46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_openbsd.go+46

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/dirent_solaris.go+29

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/dirent/doc.go+2

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go120.go+31

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/internal/fmtdirent/fmtdirent_go121.go+15

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin.go+93

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_amd64.1_13.s+22

This diff is too big to show here.

vendor/github.com/charlievieth/fastwalk/zsyscall_darwin_arm64.1_13.s+22

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.gitignore+4

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.release-please-manifest.json+3

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/.stats.yml+4

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/Brewfile+1

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/CHANGELOG.md+641

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/CONTRIBUTING.md+65

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/LICENSE+8

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/README.md+999

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/SECURITY.md+27

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/aliases.go+72

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/api.md+545

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/bedrock/bedrock.go+295

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/beta.go+374

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betafile.go+273

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessage.go+11734

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessagebatch.go+925

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamessageutil.go+459

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betamodel.go+151

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betaskill.go+362

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betaskillversion.go+373

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/betatoolrunner.go+435

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/client.go+157

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/completion.go+196

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/field.go+46

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apierror/apierror.go+58

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/encoder.go+473

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/form.go+5

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/richparam.go+21

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiform/tag.go+51

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/decoder.go+709

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/encoder.go+392

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/enum.go+145

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/field.go+23

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/port.go+120

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/registry.go+59

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/subfield.go+68

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/tag.go+47

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apijson/union.go+209

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/encoder.go+414

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/query.go+55

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/richparam.go+20

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/apiquery/tag.go+44

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/decode.go+1325

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/encode.go+1396

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/fold.go+48

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/indent.go+182

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/scanner.go+610

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/sentinel/null.go+47

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/shims/shims.go+113

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/stream.go+512

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tables.go+218

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/tags.go+38

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/encoding/json/time.go+62

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/field.go+30

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/paramutil/union.go+49

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/requestconfig/requestconfig.go+638

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/internal/version.go+5

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/message.go+9436

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/messagebatch.go+827

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/messageutil.go+413

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/model.go+151

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/option/middleware.go+38

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/option/requestoption.go+285

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/jsonl/jsonl.go+62

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/pagination/pagination.go+351

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/encoder.go+109

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/null.go+19

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/option.go+122

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/param/param.go+189

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/respjson/respjson.go+88

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/packages/ssestream/ssestream.go+198

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/release-please-config.json+68

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/schemautil.go+244

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/shared/constant/constants.go+487

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/shared/shared.go+346

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/tools.md+292

This diff is too big to show here.

vendor/github.com/charmbracelet/anthropic-sdk-go/vertex/vertex.go+134

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/.golangci.yml+47

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/.goreleaser.yml+6

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/README.md+109

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/doc.go+4

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env.go+294

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env_other.go+8

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/env_windows.go+40

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/profile.go+108

This diff is too big to show here.

vendor/github.com/charmbracelet/colorprofile/writer.go+171

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.gitignore+4

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.release-please-manifest.json+3

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/.stats.yml+4

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/Brewfile+1

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/CHANGELOG.md+1171

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/CONTRIBUTING.md+65

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/LICENSE+201

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/MIGRATION.md+284

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/README.md+1007

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/SECURITY.md+29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/aliases.go+585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/api.md+774

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audio.go+61

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiospeech.go+179

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiotranscription.go+950

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/audiotranslation.go+120

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/azure/azure.go+269

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/batch.go+464

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/beta.go+36

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betaassistant.go+2284

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkit.go+125

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkitsession.go+83

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betachatkitthread.go+1564

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathread.go+1574

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadmessage.go+1717

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadrun.go+974

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/betathreadrunstep.go+1396

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chat.go+30

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chatcompletion.go+3521

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/chatcompletionmessage.go+100

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/client.go+185

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/completion.go+436

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/container.go+648

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/containerfile.go+287

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/containerfilecontent.go+50

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/aliases.go+585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/api.md+31

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/conversation.go+493

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/conversations/item.go+1082

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/embedding.go+207

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/field.go+45

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/file.go+352

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuning.go+35

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningalpha.go+29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningalphagrader.go+675

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningcheckpoint.go+29

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningcheckpointpermission.go+352

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningjob.go+884

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningjobcheckpoint.go+152

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/finetuningmethod.go+1487

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/grader.go+28

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/gradergradermodel.go+1753

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/image.go+1337

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apierror/apierror.go+58

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/encoder.go+473

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/form.go+5

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/richparam.go+20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiform/tag.go+72

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/decoder.go+688

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/encoder.go+371

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/enum.go+140

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/field.go+23

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/port.go+120

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/registry.go+51

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/subfield.go+67

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/tag.go+69

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apijson/union.go+208

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/encoder.go+394

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/query.go+55

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/richparam.go+20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/apiquery/tag.go+44

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/decode.go+1324

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/encode.go+1396

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/fold.go+48

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/indent.go+182

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/scanner.go+610

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/sentinel/null.go+46

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/shims/shims.go+113

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/stream.go+512

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tables.go+218

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/tags.go+38

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/encoding/json/time.go+61

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/paramutil/field.go+30

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/paramutil/union.go+48

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/requestconfig/requestconfig.go+644

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/internal/version.go+5

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/model.go+137

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/moderation.go+489

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/option/middleware.go+38

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/option/requestoption.go+299

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/pagination/pagination.go+329

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/encoder.go+109

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/null.go+19

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/option.go+122

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/param/param.go+186

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/respjson/respjson.go+88

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/packages/ssestream/ssestream.go+247

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/polling.go+129

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/aliases.go+585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/api.md+55

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/call.go+133

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/clientsecret.go+1826

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/realtime/realtime.go+1979

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/release-please-config.json+68

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/aliases.go+585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/api.md+240

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/inputitem.go+135

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/inputtoken.go+336

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/responses/response.go+21786

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/shared/constant/constants.go+1143

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/shared/shared.go+1183

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skill.go+292

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillcontent.go+46

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillversion.go+283

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/skillversioncontent.go+50

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/streamaccumulator.go+215

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/upload.go+238

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/uploadpart.go+115

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstore.go+911

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstorefile.go+535

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/vectorstorefilebatch.go+427

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/video.go+677

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/aliases.go+585

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/api.md+20

This diff is too big to show here.

vendor/github.com/charmbracelet/openai-go/webhooks/webhook.go+1306

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.gitattributes+1

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.golangci.yml+48

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/.goreleaser.yml+5

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/README.md+161

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/TUTORIAL.md+175

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/border.go+231

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/buffer.go+831

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cancelreader_other.go+16

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cancelreader_windows.go+139

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cell.go+465

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console.go+219

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console_unix.go+13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/console_windows.go+13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/cursor.go+22

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/decoder.go+2102

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/doc.go+46

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/environ.go+32

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/event.go+567

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/casso/math.go+172

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/casso/solver.go+275

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/internal/lru/lru.go+69

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/key.go+762

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/key_table.go+664

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/cache.go+29

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/constraint.go+174

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/flex.go+210

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/layout.go+973

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/layout/padding.go+66

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/logger.go+6

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/mouse.go+150

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll.go+38

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_bsd.go+165

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_default.go+12

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_fallback.go+158

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_linux.go+175

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_select.go+156

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_solaris.go+12

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/poll_windows.go+217

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/screen/context.go+379

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/screen/screen.go+117

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/styled.go+337

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tabstop.go+142

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal.go+394

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly.go+10

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_bsdly_other.go+8

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_other.go+22

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader.go+503

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader_other.go+13

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_reader_windows.go+336

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer.go+1639

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hardscroll.go+243

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_renderer_hashmap.go+298

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_screen.go+837

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly.go+10

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_tabdly_other.go+8

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_unix.go+56

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/terminal_windows.go+77

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty.go+42

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_other.go+26

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_unix.go+39

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/tty_windows.go+39

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/utils.go+15

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/uv.go+406

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch.go+62

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch_other.go+17

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/winch_unix.go+50

This diff is too big to show here.

vendor/github.com/charmbracelet/ultraviolet/window.go+147

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ansi.go+11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ascii.go+8

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/background.go+178

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/c0.go+79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/c1.go+72

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/charset.go+55

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/clipboard.go+75

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/color.go+784

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/ctrl.go+156

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/cursor.go+637

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/cwd.go+26

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/doc.go+7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/finalterm.go+67

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/focus.go+9

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/graphics.go+62

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/hyperlink.go+28

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/inband.go+24

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/iterm2.go+18

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/keypad.go+28

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty.go+90

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/decoder.go+86

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/encoder.go+64

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/graphics.go+414

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/options.go+373

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/kitty/writer.go+187

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/method.go+196

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mode.go+690

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mode_deprecated.go+495

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/modes.go+65

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/mouse.go+172

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/notification.go+32

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/palette.go+34

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser.go+417

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/const.go+79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/seq.go+136

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser/transition_table.go+273

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_decode.go+525

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_handler.go+60

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/parser_sync.go+29

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/passthrough.go+60

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/paste.go+7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/progress.go+49

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/reset.go+11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/screen.go+410

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/sgr.go+79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/status.go+168

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/style.go+819

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/termcap.go+41

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/title.go+48

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/truncate.go+290

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/urxvt.go+17

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/util.go+92

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/width.go+107

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/winop.go+59

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/wrap.go+472

This diff is too big to show here.

vendor/github.com/charmbracelet/x/ansi/xterm.go+138

This diff is too big to show here.

vendor/github.com/charmbracelet/x/editor/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/editor/editor.go+140

This diff is too big to show here.

vendor/github.com/charmbracelet/x/etag/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/etag/etag.go+48

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/charmtone/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/charmtone/charmtone.go+443

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/golden/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/golden/golden.go+83

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/ordered/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/ordered/ordered.go+42

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/slice/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/slice/slice.go+148

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/contains.go+16

This diff is too big to show here.

vendor/github.com/charmbracelet/x/exp/strings/join.go+134

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/config.go+118

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/lsps.json+367

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/config/overrides.go+85

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/client.go+875

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/language.go+158

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol.go+50

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/LICENSE+27

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/interface.go+132

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/pattern_interfaces.go+79

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tables.go+31

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsdocument-changes.go+83

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsjson.go+3072

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/tsprotocol.go+6963

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/protocol/uri.go+192

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/sync.go+240

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/lsp/types.go+93

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/connection.go+130

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/router.go+107

This diff is too big to show here.

vendor/github.com/charmbracelet/x/powernap/pkg/transport/transport.go+214

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term.go+51

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_other.go+39

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_plan9.go+118

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix.go+96

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix_bsd.go+11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_unix_other.go+11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/term_windows.go+87

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/terminal.go+12

This diff is too big to show here.

vendor/github.com/charmbracelet/x/term/util.go+47

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_bsd.go+7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_darwin.go+7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/bit_other.go+7

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_bsd.go+11

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_darwin.go+10

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/syscalls_linux.go+14

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios.go+249

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_bsd.go+13

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_linux.go+13

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_other.go+15

This diff is too big to show here.

vendor/github.com/charmbracelet/x/termios/termios_solaris.go+26

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/LICENSE+21

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/doc.go+4

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/syscall_windows.go+14

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/types.go+221

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/types_windows.go+142

This diff is too big to show here.

vendor/github.com/charmbracelet/x/windows/zsyscall_windows.go+77

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/.gitignore+3

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/AGENTS.md+51

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/CHANGELOG.md+129

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/LICENSE+21

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/README.md+190

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/gen.go+3

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/graphemes.go+73

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/options.go+30

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/trie.go+1699

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/truncate.go+149

This diff is too big to show here.

vendor/github.com/clipperhouse/displaywidth/width.go+239

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/LICENSE+21

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/README.md+120

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi.go+138

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/ansi8.go+79

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/iterator.go+144

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/reader.go+25

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/splitfunc.go+205

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/graphemes/trie.go+1717

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/README.md+121

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/bleve_compat.go+104

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/iterator.go+126

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/joiners.go+41

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/reader.go+34

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/seek.go+43

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/splitfunc.go+269

This diff is too big to show here.

vendor/github.com/clipperhouse/uax29/v2/words/trie.go+3774

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/.golangci.yml+60

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/CHANGELOG.md+453

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/COPYING.md+447

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/LICENSE.BSD+28

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/LICENSE.MPL-2.0+373

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/README.md+184

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/VERSION+1

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/codecov.yml+29

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/doc.go+47

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/internal/consts/consts.go+15

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/join.go+169

This diff is too big to show here.

vendor/github.com/cyphar/filepath-securejoin/vfs.go+37

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/LICENSE+15

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/bypass.go+145

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/bypasssafe.go+38

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/common.go+341

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/config.go+306

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/doc.go+211

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/dump.go+509

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/format.go+419

This diff is too big to show here.

vendor/github.com/davecgh/go-spew/spew/spew.go+148

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/.gitignore+29

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/LICENSE.md+22

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/README.md+182

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/helper.go+36

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id.go+45

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_bsd.go+42

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_darwin.go+37

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_linux.go+27

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/id_windows.go+23

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/logo.png

This diff is too big to show here.

vendor/github.com/denisbrodbeck/machineid/makefile+12

This diff is too big to show here.

vendor/github.com/disintegration/imaging/.travis.yml+12

This diff is too big to show here.

vendor/github.com/disintegration/imaging/LICENSE+21

This diff is too big to show here.

vendor/github.com/disintegration/imaging/README.md+226

This diff is too big to show here.

vendor/github.com/disintegration/imaging/adjust.go+253

This diff is too big to show here.

vendor/github.com/disintegration/imaging/convolution.go+148

This diff is too big to show here.

vendor/github.com/disintegration/imaging/doc.go+7

This diff is too big to show here.

vendor/github.com/disintegration/imaging/effects.go+169

This diff is too big to show here.

vendor/github.com/disintegration/imaging/histogram.go+52

This diff is too big to show here.

vendor/github.com/disintegration/imaging/io.go+444

This diff is too big to show here.

vendor/github.com/disintegration/imaging/resize.go+595

This diff is too big to show here.

vendor/github.com/disintegration/imaging/scanner.go+285

This diff is too big to show here.

vendor/github.com/disintegration/imaging/tools.go+249

This diff is too big to show here.

vendor/github.com/disintegration/imaging/transform.go+268

This diff is too big to show here.

vendor/github.com/disintegration/imaging/utils.go+167

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/.gitignore+29

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/ATTRIB+133

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/LICENSE+21

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/README.md+283

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/Taskfile.yml+64

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/bufferpool.go+76

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/fastclock.go+141

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/indexof.go+394

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/math.go+15

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/runes.go+58

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/helpers/searchvalues.go+180

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/match.go+455

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/options.go+157

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/regexp.go+717

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/regexp_codegen.go+70

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/replace.go+357

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/runner.go+2197

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/split.go+67

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/stringprefixfilter.go+375

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/charclass.go+1507

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/code.go+316

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/escape.go+94

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/fuzz.go+21

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/optimizations.go+672

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/parser.go+2529

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/prefix.go+943

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/prefixanalyzer.go+1491

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/replacerdata.go+87

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/tree.go+2362

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/unicode_alias_tables.go+6058

This diff is too big to show here.

vendor/github.com/dlclark/regexp2/v2/syntax/writer.go+500

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/.travis.yml+21

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/LICENSE+21

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/README.markdown+124

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/big.go+31

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/bigbytes.go+189

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/bytes.go+143

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/comma.go+116

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/commaf.go+41

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/ftoa.go+49

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/humanize.go+8

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/number.go+192

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/ordinals.go+25

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/si.go+127

This diff is too big to show here.

vendor/github.com/dustin/go-humanize/times.go+117

This diff is too big to show here.

vendor/github.com/ebitengine/purego/.gitignore+1

This diff is too big to show here.

vendor/github.com/ebitengine/purego/LICENSE+201

This diff is too big to show here.

vendor/github.com/ebitengine/purego/README.md+119

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_amd64.h+99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_arm64.h+39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/abi_loong64.h+60

This diff is too big to show here.

vendor/github.com/ebitengine/purego/cgo.go+19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlerror.go+17

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn.go+99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_android.go+34

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_darwin.go+20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_freebsd.go+14

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_linux.go+16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_netbsd.go+15

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_freebsd.go+11

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_linux.go+19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_nocgo_netbsd.go+9

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_playground.go+24

This diff is too big to show here.

vendor/github.com/ebitengine/purego/dlfcn_stubs.s+22

This diff is too big to show here.

vendor/github.com/ebitengine/purego/func.go+564

This diff is too big to show here.

vendor/github.com/ebitengine/purego/gen.go+6

This diff is too big to show here.

vendor/github.com/ebitengine/purego/go_runtime.go+13

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/dlfcn_cgo_unix.go+56

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/empty.go+6

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/cgo/syscall_cgo_unix.go+55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_amd64.h+99

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_arm64.h+39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_loong64.h+60

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/abi_ppc64x.h+195

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_386.s+29

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_amd64.s+39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm.s+52

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_arm64.s+36

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_loong64.s+40

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_ppc64le.s+82

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_riscv64.s+78

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/asm_s390x.s+55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/callbacks.go+93

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/doc.go+32

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/fakecgo.go+14

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/freebsd.go+27

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_darwin.go+88

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_freebsd.go+100

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_libinit.go+72

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_linux.go+100

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_netbsd.go+106

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_setenv.go+18

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/go_util.go+38

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/iscgo.go+19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo.go+39

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_darwin.go+26

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_freebsd.go+20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_linux.go+20

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/libcgo_netbsd.go+26

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/netbsd.go+23

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/setenv.go+19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_386.s+107

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_amd64.s+107

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm.s+81

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_arm64.s+84

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_loong64.s+88

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_ppc64le.s+227

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/trampolines_riscv64.s+72

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols.go+165

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_darwin.go+59

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_freebsd.go+48

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_linux.go+48

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/zsymbols_netbsd.go+59

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_darwin.s+19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_freebsd.s+16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_linux.s+16

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_netbsd.s+19

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/fakecgo/ztrampolines_stubs.s+55

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/strings/strings.go+40

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go124.go+15

This diff is too big to show here.

vendor/github.com/ebitengine/purego/internal/xreflect/reflect_go125.go+12

This diff is too big to show here.

vendor/github.com/ebitengine/purego/is_ios.go+13

This diff is too big to show here.

vendor/github.com/ebitengine/purego/nocgo.go+25

This diff is too big to show here.

vendor/github.com/ebitengine/purego/objc/objc_block_darwin.go+272

This diff is too big to show here.

vendor/github.com/ebitengine/purego/objc/objc_runtime_darwin.go+709

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_386.go+41

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_amd64.go+286

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_arm.go+85

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_arm64.go+549

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_loong64.go+213

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_ppc64le.go+143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_riscv64.go+143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/struct_s390x.go+143

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_386.s+147

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_amd64.s+170

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_arm.s+142

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_arm64.s+97

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_loong64.s+96

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_ppc64le.s+120

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_riscv64.s+101

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_s390x.s+114

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_386.s+226

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_arm.s+89

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_arm64.s+70

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_loong64.s+75

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_ppc64le.s+114

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_riscv64.s+79

This diff is too big to show here.

vendor/github.com/ebitengine/purego/sys_unix_s390x.s+109

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall.go+83

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_32bit.go+109

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_cgo_linux.go+21

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_sysv.go+317

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_sysv_others.go+28

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_sysv_stackargs.go+33

This diff is too big to show here.

vendor/github.com/ebitengine/purego/syscall_windows.go+46

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_386.s+4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_amd64.s+2014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_arm.s+4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_arm64.s+4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_loong64.s+4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_ppc64le.s+4014

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_riscv64.s+4051

This diff is too big to show here.

vendor/github.com/ebitengine/purego/zcallback_s390x.s+4015

This diff is too big to show here.

vendor/github.com/esiqveland/notify/.gitignore+1

This diff is too big to show here.

vendor/github.com/esiqveland/notify/LICENSE.txt+27

This diff is too big to show here.

vendor/github.com/esiqveland/notify/README.md+54

This diff is too big to show here.

vendor/github.com/esiqveland/notify/doc.go+18

This diff is too big to show here.

vendor/github.com/esiqveland/notify/notification.go+547

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/.gitignore

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/LICENSE.txt+19

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/Makefile+10

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/README.md+95

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/capture_metrics.go+121

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/docs.go+10

This diff is too big to show here.

vendor/github.com/felixge/httpsnoop/wrap_generated.go+16179

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/.cirrus.yml+14

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/.gitignore+10

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/.mailmap+2

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/CHANGELOG.md+602

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/CONTRIBUTING.md+145

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/LICENSE+25

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/README.md+182

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_fen.go+467

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_inotify.go+583

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_kqueue.go+705

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_other.go+22

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/backend_windows.go+680

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/fsnotify.go+496

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/darwin.go+39

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_darwin.go+57

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_dragonfly.go+33

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_freebsd.go+42

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_kqueue.go+32

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_linux.go+56

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_netbsd.go+25

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_openbsd.go+28

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_solaris.go+45

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/debug_windows.go+40

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/freebsd.go+31

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/internal.go+2

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/unix.go+31

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/unix2.go+7

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/internal/windows.go+41

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/shared.go+64

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/staticcheck.conf+3

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/system_bsd.go+7

This diff is too big to show here.

vendor/github.com/fsnotify/fsnotify/system_darwin.go+8

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/LICENSE+23

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/README.md+41

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_darwin.go+8

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_js.go+12

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_unix.go+17

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_unsupported.go+8

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/alert_windows.go+43

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beeep.go+55

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_darwin.go+32

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_js.go+39

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_unix.go+100

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_unsupported.go+15

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/beep_windows.go+52

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_darwin.go+131

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_js.go+63

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_unix.go+181

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_unix_nodbus.go+78

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_unsupported.go+8

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_windows.go+157

This diff is too big to show here.

vendor/github.com/gen2brain/beeep/notify_windows_compat.go+109

This diff is too big to show here.

vendor/github.com/go-git/gcfg/.gitignore+1

This diff is too big to show here.

vendor/github.com/go-git/gcfg/LICENSE+28

This diff is too big to show here.

vendor/github.com/go-git/gcfg/Makefile+17

This diff is too big to show here.

vendor/github.com/go-git/gcfg/README+4

This diff is too big to show here.

vendor/github.com/go-git/gcfg/doc.go+145

This diff is too big to show here.

vendor/github.com/go-git/gcfg/errors.go+41

This diff is too big to show here.

vendor/github.com/go-git/gcfg/read.go+273

This diff is too big to show here.

vendor/github.com/go-git/gcfg/scanner/errors.go+121

This diff is too big to show here.

vendor/github.com/go-git/gcfg/scanner/scanner.go+334

This diff is too big to show here.

vendor/github.com/go-git/gcfg/set.go+334

This diff is too big to show here.

vendor/github.com/go-git/gcfg/token/position.go+435

This diff is too big to show here.

vendor/github.com/go-git/gcfg/token/serialize.go+56

This diff is too big to show here.

vendor/github.com/go-git/gcfg/token/token.go+83

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/bool.go+23

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/doc.go+4

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/enum.go+44

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/int.go+86

This diff is too big to show here.

vendor/github.com/go-git/gcfg/types/scan.go+23

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/.gitignore+4

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/LICENSE+201

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/Makefile+18

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/README.md+77

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/fs.go+210

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/helper/chroot/chroot.go+444

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/helper/polyfill/polyfill.go+114

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/memfs/memory.go+428

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/memfs/storage.go+251

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os.go+132

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_bound.go+351

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_chroot.go+126

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_js.go+25

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_options.go+3

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_plan9.go+91

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_posix.go+38

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_wasip1.go+34

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/osfs/os_windows.go+58

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/util/glob.go+111

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/util/util.go+282

This diff is too big to show here.

vendor/github.com/go-git/go-billy/v5/util/walk.go+72

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/LICENSE+201

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/branch.go+123

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/config.go+727

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/modules.go+191

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/optbool.go+82

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/refspec.go+155

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/config/url.go+81

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/path_util/path_util.go+29

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/pathutil/dotgit.go+21

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/pathutil/hfs.go+99

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/pathutil/ntfs.go+187

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/pathutil/tree.go+66

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/internal/url/url.go+72

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/error.go+35

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/common.go+109

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/decoder.go+37

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/doc.go+122

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/encoder.go+82

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/format.go+53

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/option.go+127

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/config/section.go+181

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/dir.go+148

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/doc.go+70

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/matcher.go+30

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/format/gitignore/pattern.go+155

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/hash.go+84

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/hash/hash.go+60

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/hash/hash_sha1.go+15

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/hash/hash_sha256.go+15

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/memory.go+72

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/object.go+111

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/reference.go+315

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/plumbing/revision.go+11

This diff is too big to show here.

vendor/github.com/go-git/go-git/v5/utils/ioutil/common.go+210

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/AUTHORS+3

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/CONTRIBUTORS+3

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/LICENSE+27

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/README.md+176

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/alias.go+943

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/api.png

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal.go+569

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_any.go+289

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_default.go+2043

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_embedded.go+230

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_funcs.go+428

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_methods.go+378

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/arshal_time.go+795

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/doc.go+247

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/errors.go+465

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/fields.go+656

This diff is too big to show here.

vendor/github.com/go-json-experiment/json/fold.go+58

This diff is too big to show here.

4911 more files changed are not listed.